- Este tópico contém 3 respostas, 4 vozes e foi atualizado pela última vez 11 anos, 7 meses atrás por
Marcio68Almeida.
-
AutorPosts
-
1 de agosto de 2014 às 9:22 pm #106798
Wiliam
ParticipantePessoal,
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 0Pelo ú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)1 de agosto de 2014 às 11:56 pm #106800rman
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.htmlNo exemplo que você deu, eu criaria uma índice composto contendo as 2 colunas.
6 de agosto de 2014 às 9:53 pm #106818Fábio Prado
ParticipanteWilliam,
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
8 de agosto de 2014 às 1:38 am #106823Marcio68Almeida
ParticipanteEste 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. -
AutorPosts
- Você deve fazer login para responder a este tópico.