Pular para o conteúdo
  • Este tópico contém 2 respostas, 2 vozes e foi atualizado pela última vez 14 anos atrás por Hitotuzi.
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #102877
    Hitotuzi
    Participante

      Bom dia!

      Tem um select em uma tabela que possui indices na tabela para os campos col_b e col_c


      SELECT
      col_a,
      col_b,
      col_c,
      col_d,
      col_e,
      col_f
      FROM
      tabela
      WHERE
      col_b = '1'
      OR
      col_b = '5'
      ORDER BY col_f

      No entanto esse select faz um acesso full, porém qundo eu removo o ORDER BY ele busca pelo índice, alguém sabe explicar? qual a influencia do order by? porque ele anula o indice?

      #102878
      rman
      Participante

        @Hitotuzi

        São 2 índices ou 1 índice para cada coluna ?

        O uso do OR não favorece o uso de índices, pode ser feito assim para evitar o uso do OR.


        SELECT
        col_a,
        col_b,
        col_c,
        col_d,
        col_e,
        col_f
        FROM
        siate.nfefilae
        WHERE col_b = '1'
        UNION ALL
        SELECT
        col_a,
        col_b,
        col_c,
        col_d,
        col_e,
        col_f
        FROM
        siate.nfefilae
        WHERE col_b = '5'
        ORDER BY 6

        Usar ou não usar o índice depende da cardinalidade, nem sempre o TABLE FULL SCAN é ruim, as vezes é mais rapido ler a tabela toda do que consultar o índice.

        #102879
        Hitotuzi
        Participante

          Obrigado!

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