Pular para o conteúdo
  • Este tópico contém 3 respostas, 4 vozes e foi atualizado pela última vez 11 anos, 7 meses atrás por Marcio68Almeida.
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #106798
    Wiliam
    Participante

      Pessoal,

      Tenho uma tabela grande, 300 milhões de registro, suponha uma consulta:

      SELECT a, b FROM tabela WHERE a = 10 AND b = 20;

      Tenho dois índices, um apenas na coluna A e outro apenas na coluna B. Como o oracle resolveria isso ?? utilizaria o algoritmo INDEX RANGE SCAN para indices secundários?? e acessaria os dois indices e depois faria um JOIN em memória?

      Quando fazia SQL para o postgresql lembro que esse SGBD resolvia com o Algoritmo bitmap index scan,como abaixo:

      suponha um exemplo com apenas 8 tuplas, se uma navegação no índice em A retornasse as tuplas 1,4 e 7 e no índice em B as tuplas 4 e 6. O postgresql geraria bitmaps como:

      1. 2. 3. 4. 5. 6. 7. 8.
      1 0 0 1 0 0 1 0 => bitmap recuperado do índice em A
      0 0 0 1 0 1 0 0 => bitmap recuperado do índice em B
      =========================> operação AND
      0 0 0 1 0 0 0 0

      Pelo último bitmap (00010000) percebe-se que apenas a tuplas 4 precisa ser visitada.

      Minha dúvida é se o oracle utiliza bitmaps para unir o resultado dos dois indices, ou faria de outra forma.
      Qualquer ajuda é bem vinda B)

      #106800
      rman
      Participante

        @Wiliam

        Essa dúvida pode ser esclarecida consultando o plano de execução.

        Segue um artigo sobre isso:
        http://www.fabioprado.net/2011/03/analisando-o-plano-de-execucao-para.html

        No exemplo que você deu, eu criaria uma índice composto contendo as 2 colunas.

        #106818
        Fábio Prado
        Participante

          William,

          Não dá para te dar a resposta exata, pois o assunto é bem complexo… a query teria que ser analisar para saber se o Otimizador usaria mais de 1 índice da mesma tabela. De qq forma, a resposta é que o Otimizador consegue sim, converter em determinadas operações índices btree em bitmap, ok?

          []s

          #106823
          Marcio68Almeida
          Participante

            Este tipo de questão é mais para a área acadêmica do que para uma área de produção…

            Eu nunca percebi que o banco de dados utilizasse um índice para separar parte da informação e depois utilizar outro para complementar a consulta, mesmo por que, o segundo índice estará em ordem totalmente diferente do primeiro, os registros selecionados pelo primeiro fariam uma verdadeira “zona” na organização dos dados.

            É claro que estou falando até a versão 10g, pela minha pouca lógica, o segundo índice não contempla somente os dados reservados pela primeira parte da consulta.
            O que você poderia fazer é utilizar tabelas temporárias ou views dinâmicas, se não quizer criar um índice composto.

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