Pular para o conteúdo
  • Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 18 anos, 7 meses atrás por Avatar de Marcio68AlmeidaMarcio68Almeida.
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #75601
    Anô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)
      Fim

      Inicialmente 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

      #75606
      Anônimo

        where campoA =
        case when (campoX= d) then campoY – 3/24
        else campoY – 2/24 end;

        #75608
        Anônimo

          Guilherme,

          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.

          #75617
          Avatar de Marcio68AlmeidaMarcio68Almeida
          Participante

            na 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…

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.
          plugins premium WordPress