- Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 18 anos, 7 meses atrás por Marcio68Almeida.
-
AutorPosts
-
26 de abril de 2006 às 10:17 pm #75601Anônimo
Olá!
Estou precisando fazer um teste num campo dentro de um “where”.
Se campoX = ‘d’
então
campoY – 3/24 (diminuindo 3 horas do campo)
Senão
Se campoX = ‘s’ então
campoY – 2/24 (diminuindo 2 horas do campo)
FimInicialmente fiz isso com decode:
decode (HZ.TIME_DST, ‘s’, HZ.TIME -3/24, ‘d’, HZ.TIME -2/24)Mas a consulta ficou muito lenta.
Será q com case ficaria mais rápida? E como seria com case? a sintaxe?
Abraços
27 de abril de 2006 às 6:01 pm #75606Anônimowhere campoA =
case when (campoX= d) then campoY – 3/24
else campoY – 2/24 end;27 de abril de 2006 às 9:47 pm #75608AnônimoGuilherme,
As estatísticas mostram que o decode tem uma performance um pouco melhor, mas muito pouca diferença, dá uma olhada no exemplo abaixo:
1 select empno, (case when sal = 2000 then ‘Salario Minimo’
2 when sal = 3000 then ‘Salario Normal’
3 when sal = 5000 then ‘Salario Bom’
4 else
5 ‘Desconhecido’ end) “Tipo Salario”
6* from scott.emp
SQL> /EMPNO Tipo Salario
7369 Desconhecido 7499 Desconhecido 7521 Desconhecido 7566 Desconhecido 7654 Desconhecido 7698 Desconhecido 7782 Desconhecido 7788 Salario Normal 7839 Salario Bom 7844 Desconhecido 7876 Desconhecido EMPNO Tipo Salario
7900 Desconhecido 7902 Salario Normal 7934 Desconhecido
14 rows selected.
Execution Plan
Plan hash value: 3956160932
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 14 | 112 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| EMP | 14 | 112 | 3 (0)| 00:00:01 |
Statistics
163 recursive calls 0 db block gets 41 consistent gets 0 physical reads 0 redo size 699 bytes sent via SQL*Net to client 381 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 6 sorts (memory) 0 sorts (disk) 14 rows processed
1 SELECT empno,
2 decode(sal, 2000, ‘Salario Minimo’,
3 3000, ‘Salario Normal’,
4 5000, ‘Salario Bom’,
5 ‘Desconhecido’) “Tipo Salario”
6* FROM scott.emp
SQL> /EMPNO Tipo Salario
7369 Desconhecido 7499 Desconhecido 7521 Desconhecido 7566 Desconhecido 7654 Desconhecido 7698 Desconhecido 7782 Desconhecido 7788 Salario Normal 7839 Salario Bom 7844 Desconhecido 7876 Desconhecido EMPNO Tipo Salario
7900 Desconhecido 7902 Salario Normal 7934 Desconhecido
14 rows selected.
Execution Plan
Plan hash value: 3956160932
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 14 | 112 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| EMP | 14 | 112 | 3 (0)| 00:00:01 |
Statistics
1 recursive calls 0 db block gets 8 consistent gets 0 physical reads 0 redo size 699 bytes sent via SQL*Net to client 381 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 14 rows processed
Abraço.
28 de abril de 2006 às 1:41 am #75617Marcio68AlmeidaParticipantena verdade, a “alma” da sua consulta está na cláusula where, onde você defini a atuação do banco, tanto o decode quanto o case não deverão influenciar significativamente no seu resultado.
faça um teste somente trazendo a informação e verá que não houve grandes alterações.
Agora, se voc~e criar um índice e restringir a sua consulta baseada no índice criado, ai sim, você terá ganhos reais… -
AutorPosts
- Você deve fazer login para responder a este tópico.