Entendendo a utilização de Índices
Salve Galera do Bem..!!!!
A um tempo atras eu estava procurando uma “apostila” de Sql Básico para passar a uma pessoa que me pediu, dentre os arquivos encontrados me deparei com um que me chamou muito a atenção pela didática com a qual ele foi escrito e o detalhamento de informações, então resolvi compartilhar o conteudo deste documento com vocês.. Mas devido ao conteudo ser um pouco extenso, vou faze-lo em partes.
Espero que desfrutem deste material…
1. Método de Acesso
Representa o tipo de acesso para obter os dados de uma determinada tabela. O Oracle possui os seguintes métodos:
1.1 Full Table Scan
• Realiza a leitura direta da tabela para determinar os registros que satisfazem a cláusula Where
• Permite o uso do multiblock I/O (leitura de vários blocos seqüenciais com um simples I/O)
• Permite a paralelização
• Nem sempre representa um método de acesso ruim
1.2 Table Access by Rowid
• Realiza o acesso a tabela pelo Rowid
• É a maneira mais rápida de acessar um registro
1.3 Index Scan
• Realiza o acesso aos dados através de um índice
• A maioria é do tipo b*-tree (padrão)
Estrutura interna da B*-tree
Full Scan: é usado quando a query usa pelo menos uma coluna do índice. Também é usado quando a consulta não possui predicado e se deseja evitar a operação de sort.
Fast Full Scan: é um Full Table Scan alternativo usado quando o índice possui todas colunas necessárias para a query. Para ler todos dados do índice, é mais rápido que o Index Scan por possibilitar o Multiblock I/O e a paralelização.
Obs: não pode ser usado para evitar a operação de sort (os dados não são retornados de forma ordenada).
Bitmap: utiliza um bitmap como chave para cada valor distinto da coluna e uma função de mapeamento que converte cada bit para um rowid. Se a coluna indexada tiver baixa cardinalidade, são rápidos e ocupam pouco espaço.
Obs: uma coluna é considerada de baixa cardinalidade se o número de valores distintos for menor ou igual a 1% do total de registros.
Exemplo: tabela Customer com 6 registros
Índice Bitmap sobre a coluna Region
Consulta de clientes casados e da região central e oeste.
SELECT COUNT(*) FROM customer
WHERE STATUS = 'married'
AND REGION IN ('central','west');
Bom.. espero q tenham gostado desta primeira parte, o documento possui um total de 4 partes.. caso tenham alguma dúvida.. basta postarem que irei fazer o máximo para auxiliar..!
Abraços Galera.. Ótimo dia a todos..!!
Excelente explicação, Regis !
Vou esperar a próxima parte.
Abraço !
[…] Blog do Regis Araujo « Entendendo a ultilização de Indices – Parte I […]
[…] PARTE I […]
Fala Regis, belezura?!
Parabéns pela abordagem, muito clara!
Obs.: você tem falado com o Willians? Mandei um e-mail para ele, porém, não obtive resposta, precisamos retomar o “café” com GPO hehehehee
Forte abraço
Wagner Vinicius
Fala Wagner, obrigado…
Eu não tenho falado muito com o Will, mas pelo post q ele deixou no GPO, ele esta retornando as atividades, aos poucos.. creio que logo logo teremos mais café com GPO..!
Abraços..!
Regis Araujo
[…] PARTE I PARTE II […]
Awesome website…
Really nice blog. I will check back for more information on this subject later….