Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #99107
    Anônimo

      Senhores,
      estou com uma tremenda dúvida. Estou precisando fazer uma query em uma tabela que tem 13 milhões de registros mas estou me deparando com um problema. É uma query simples :

      SELECT ST.C FROM TABLE_ABC ST
      WHERE ST.A IS NOT NULL
      AND LENGTH(ST.B) = 11

      Observações:
      A coluna A é um índíce no qual a pessoa que criou isso permitiu os valores nulos no índice, ou seja, 70% dos valores são nulos
      A coluna B e C também são índices. Sendo que o índice C é único.

      Estou procurando usar o índice da coluna A .

      Alguém tem alguma dica em um caso desses ?

      Obrigado e abraços!!

      #99108
      burga
      Participante

        Pra que usar o índice? A performance da consulta está tão ruim assim? Se usar o índice ela pode piorar, e muito provavelmente vai piorar.

        Usar um índice pra retornar 30% de registros de uma tabela não parece ser uma boa idéia, o normal é quando se espera menos de 10% do total de registros da tabela.

        Mas se ainda assim quiser testar, utilize hints pra tentar forçar o uso do índice. Algo como:

        SELECT /*+ index(ST NOME_DO_INDICE) */ ST.C
        FROM TABLE_ABC ST
        WHERE ST.A IS NOT NULL
        AND LENGTH(ST.B) = 11

        Quanto aos outros índices, não interessa se eles existem pois:
        1. o índice de B não será usado de qualquer forma pois você está usando a coluna em uma função;
        2. o índice de C também não será usado pois não existe condição na consulta pra essa coluna.

        Tente estudar a diferença entre o FULL TABLE SCAN e a utilização de INDICES em consultas. Nem sempre usar um vai fazer a performance da consulta melhorar…

        #99110
        CleitonHanzen
        Participante

          Como sempre o Burga com precisão cirúrgica nos seus comentários….hehehe

          A metodologia que sigo é até menor, se for retornar mais que 20% dos registros da tabela, já vale a pena fazer FTS, caso contrário a utilização de um índice realmente torna o resultado mais rápido.

          Agora, uma pergunta que sempre faço para os desenvolvedores: Pq cargas d’agua vc quer retornar tantos registros??? DÚVIDO que em algum relatório ou sistema, retornar mais de 10 mil registros seja algo que sirva pra análise de alguma coisa (estou desconsiderando as regras de negócio aqui, mas nunca vi uma exigência dessas)…..

          Outro detalhe que vale a pena salientar, desde o Oracle 10g, o otimizador leva em consideração utilizar as colunas do “meio” de um índice, fazendo o acesso que chamamos de Index Skip Scan, então não necessariamente existe a necessidade de criar um índice específico para cada coluna…. 😉

          #99114
          Anônimo

            Meu caro, infelizmente aqui na empresa ainda estamos penando no Oracle 9i com compatible do 8. Acredita?

            Então, minha finalidade é buscar um erro que ocorreu em produção. Não será para relatório.

            Na sexta-feira forcei o uso do índice essa query demorou 26 minutos em Pré produção.
            Vou tentar fazer por FTS.

            Obrigado pela ajuda de vocês.

            Abraços

            [quote=”CleitonHanzen”:2na5vwwv]Como sempre o Burga com precisão cirúrgica nos seus comentários….hehehe

            A metodologia que sigo é até menor, se for retornar mais que 20% dos registros da tabela, já vale a pena fazer FTS, caso contrário a utilização de um índice realmente torna o resultado mais rápido.

            Agora, uma pergunta que sempre faço para os desenvolvedores: Pq cargas d’agua vc quer retornar tantos registros??? DÚVIDO que em algum relatório ou sistema, retornar mais de 10 mil registros seja algo que sirva pra análise de alguma coisa (estou desconsiderando as regras de negócio aqui, mas nunca vi uma exigência dessas)…..

            Outro detalhe que vale a pena salientar, desde o Oracle 10g, o otimizador leva em consideração utilizar as colunas do “meio” de um índice, fazendo o acesso que chamamos de Index Skip Scan, então não necessariamente existe a necessidade de criar um índice específico para cada coluna…. 😉 [/quote]

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