Pergunta

Quais são os diferentes tipos de índices, quais são os benefícios de cada um?

Eu ouvi de cobertura e agrupado índices, estão lá mais? Onde você usá-los?

Foi útil?

Solução

  • Único - Garante valores únicos para a coluna (ou conjunto de colunas) incluídas no índice
  • Cobertura - Inclui todas as colunas que são usados ??em uma consulta particular (ou conjunto de consultas), permitindo que o banco de dados para utilizar apenas o índice e na verdade não tem que olhar para os dados da tabela para recuperar os resultados
  • Agrupamento - Esta é a maneira em que os dados reais são ordenados no disco, que significa que se uma consulta utiliza o índice agrupado para procurar os valores, ele não tem que dar o passo adicional de olhar para cima a linha da tabela real por quaisquer dados não incluídos no índice.

Outras dicas

OdeToCode tem um bom artigo que cobre as diferenças básicas

Como diz o artigo:

índices adequados são cruciais para o bem desempenho em grandes bancos de dados. Às vezes você pode fazer-se de um mal escrita consulta com um índice bom, mas pode ser difícil para compensar pobre indexação, mesmo com os melhores procedimentos.

Bem verdade, também ... Se você está apenas começando para fora com ele, eu foco em índices agrupados e compósitos, uma vez que provavelmente vai ser o que você usa mais.

Vou acrescentar um par de tipos de índice

BITMAP - quando você tem número muito baixo de diferentes valores possíveis, muito rápido e não ocupam muito espaço

PARTITIONED -. Permite que o índice a ser dividido com base em alguma propriedade geralmente vantajoso em objetos de banco de dados muito grandes, por razões de armazenamento ou de desempenho

índices FUNÇÃO / Expressão - utilizados para pré-calcular algum valor com base na tabela e armazená-lo no índice, um exemplo muito simples pode ser um índice baseia na menor () ou uma função subsequência.

O PostgreSQL permite índices parciais, em que apenas as linhas que correspondam a um predicado são indexados. Por exemplo, você pode querer índice da tabela do cliente para somente os registros que estão ativos. Isso poderia ser algo como:

create index i on customers (id, name, whatever) where is_active is true;

Se o seu índice de várias colunas, e você tem muitos clientes inativos, esta pode ser uma grande vitória em termos de espaço (o índice será armazenado em menos páginas de disco) e, assim, o desempenho. Para bater o índice que você precisa, no mínimo, especificar o predicado:

select name from customers where is_active is true;

A sabedoria convencional sugere que a escolha índice deve ser baseado em cardinalidade. Eles dirão:

Para uma coluna baixa cardinalidade como sexo, uso bitmap. Para um alta cardinalidade como LAST_NAME, uso b-tree.

Este não é o caso com a Oracle , onde a escolha índice deveria, antes, com base no tipo de aplicação (OLTP vs. OLAP). DML em tabelas com índices de bitmap podem causar sérios contenção de bloqueio. Por outro lado, o Oráculo CBO pode facilmente combinar vários índices bitmap juntos, e índices de bitmap pode ser usado para procurar valores nulos. Como regra geral:

Para uma OLTP sistema com DML freqüentes e consultas de rotina, uso btree. Para um OLAP sistema com DML e ad hoc consultas esporádicas, uso de bitmap.

Eu não tenho certeza se isso se aplica a outros bancos de dados, os comentários são bem-vindos. Os seguintes artigos discutir o assunto mais adiante:

sistemas de banco de dados diferentes têm nomes diferentes para o mesmo tipo de índice, por isso tome cuidado com isso. Por exemplo, o chamado "índice de cluster" SQL Server e Sybase é chamado no Oracle uma "tabela de índices-organizada".

Eu sugiro que você procurar os blogs de Jason Massie ( http://statisticsio.com/ ) e Brent Ozar ( http://www.brentozar.com/ ) para informações relacionadas. Eles têm algum post sobre cenário da vida real que lida com índices.

Oracle tem várias combinações de b-árvore, de mapa de bits, e particionada, byte não particionado inversa, bitmap juntar-se, e os índices de domínio.

Aqui está um link para a documentação 11gR1 sobre o assunto: http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/data_acc.htm#PFGRF004

  1. Único
  2. aglomerado
  3. non-cluster
  4. loja de coluna
  5. Índice com coluna incluída
  6. índice na coluna computada
  7. filtrada
  8. espacial
  9. xml
  10. texto completo

SQL Server 2008 tem índices filtrados , semelhante ao PostgreSQL da índices parciais . Ambos permitem incluir no índice de apenas as linhas que correspondem aos critérios especificados.

A sintaxe é idêntica à PostgreSQL:

create index i on Customers(name) where is_alive = cast(1 as bit);

Para exibir os tipos de índices e suas visitas significado: https://msdn.microsoft.com/en-us/library/ms175049.aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top