Índice do fórum Treinamentos Avançados Treinamento Oracle Tuning - SQL [Dúvida] Full index scan vs Fast full index scan

[Dúvida] Full index scan vs Fast full index scan

Dúvidas, dicas e atualizações sobre o Treinamento Oracle Tuning - SQL.


Mensagens: 0
Olá Portilho,

Estava lendo aqui que a principal diferença entre esses dois métodos de acesso é que o FFIS faz leitura multibloco e na ordem em que os blocos do índice estão armazenados no disco e que o FIS faz a leitura single-block e vai ordenando os blocos de índice recuperados.

Minha dúvida é relacionada ao modo em que os blocos são armazenados em disco, em qual situação eles não estarão ordenados?

Supondo a criação de um novo índice IX_1 que contenha esses dados:
bloco1 - 1..50
bloco2 - 51..100
bloco3 - 101..150

E você apaga o range de dados de 51 a 100. Esse espaço vai ser preenchido por outros dados de outras tabelas / índices ou ele fica alocado para o IX_1? Se eu inserir dados de 151 a 200, eles irão utilizar esse espaço onde era o bloco 2? :?

portilho Site Admin

Mensagens: 457
Uma coisa é a ordenação lógica do índice. Ele sempre estará ordenado logicamente. É esta ordenação da qual que o FIS se aproveita, para evitar um SORT, por exemplo.

Em um índice, os Leaf Blocks contém os valores indexados, e o ROWID (da tabela) de cada uma das linhas destes valores.
Um Leaf Block, em seu final, contém um ponteiro falando qual será o próximo Leaf Block (seguindo a ordem da chave indexada), que conterá o próximo valor. Este Leaf Block pode estar em outro lugar do DATAFILE, em outro DATAFILE, ou até mesmo em outro disco. A ordenação lógica continua.

É muito comum os blocos estarem espalhados no DATAFILE, pois você não grava em um índice de cada vez, pois geralmente trata-se de um sistema com muitas conexões fazendo muitas coisas em muitos objetos ao mesmo tempo.

Outra coisa é a ordenação "física" dos Leaf Blocks. Aí entra o caso que você disse, onde alguns Leaf Blocks estão vazios por conta de um DELETE, e há um espaço entre um e outro bloco.
Se um Leaf Block não tiver mais nenhum dado do índice, ele poderá sim ser utilizado por outro objeto, ou pelo próprio índice.


Voltar para Treinamento Oracle Tuning - SQL

cron