Pular para o conteúdo

Entendendo a utilização de Índices – Parte I

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..!!

Regis Araujo

Regis Araujo

Regis Araujo é DBA há 07 anos, especialista em Banco de Dados Oracle com experiência em SQL-Server e Bacharel em Ciências da Computação. Com conhecimentos em Banco de Dados e Sistemas operacionais.

Comentário(s) da Comunidade

  1. Avatar de Wagner Vinicius

    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

  2. Avatar de Regis Araujo

    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

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress