Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 11383|Resposta: 0

[Comunicação] Aprendizado de Índice Composto do SQL Server

[Copiar link]
Publicado em 29/01/2015 13:06:03 | | |

Visão geral
O que é um único índice e o que é um índice composto? Quando criar um novo índice composto e o que devo prestar atenção no índice composto? Este artigo é principalmente um resumo de algumas discussões na Internet.

Um. conceito

Um único índice é uma situação em que o índice é listado em uma coluna, ou seja, a declaração de criação de um novo índice é implementada em apenas uma coluna.

Os usuários podem criar índices em múltiplas colunas, chamados de índices compostos (índices combinados). Índices compostos são criados exatamente da mesma forma que índices individuais. Mas índices compostos requerem menos sobrecarga durante as operações do banco de dados e podem substituir múltiplos índices únicos. Quando o número de linhas em uma tabela é muito maior que o número de chaves, esse método pode acelerar significativamente a velocidade de consulta da tabela.

Existem dois conceitos ao mesmo tempo: índices estreitos e índices amplos; índices estreitos referem-se a índices com 1-2 colunas, e geralmente referem-se a um único índice, salvo especificação em contrário. Um índice amplo é um índice com mais de 2 colunas.

Um princípio importante do desenho de índices é usar índices estreitos em vez de índices largos, pois índices estreitos tendem a ser mais eficazes do que índices combinados. Ter índices mais estreitos dará ao otimizador mais escolha, o que muitas vezes ajuda a melhorar o desempenho.

Dois. Uso

Criar um índice
Criar Índice IDX1 na Tabela1(col1,col2,col3)  
Perguntar
selecione * da tabela 1 onde col1= A e col2= B e col3 = C

Neste momento, o otimizador de consulta não está escaneando a tabela, mas pega diretamente os dados do índice, porque há esses dados no índice, que é chamado de consulta sobreposta, e a velocidade da consulta é muito rápida.   

Três. Notas:

1. Quando usar um índice composto
Na condição where, o campo é indexado, e se múltiplos campos forem usados, um índice composto é usado. Geralmente, não construa nenhum índice no campo select (se quiser consultar select col1, col2, col3 do mytable, não precisa do índice acima). Indexar com base em onde as condições é um princípio extremamente importante. Tenha cuidado para não usar muitos índices, caso contrário isso terá um grande impacto na eficiência das atualizações de tabelas, pois você precisa gastar muito tempo criando índices ao operar tabelas.

2. Para índices compostos, ao usar consulta, é melhor seguir a ordem de encontrar índices, que é a mais eficiente. Por exemplo:  
  IDX1: criar índice IDX1 na tabela 1(col2,col3,col5)  
  select * da tabela 1 onde col2=A e col3=B e col5=D  

Se for "selecione * da tabela1 onde col3=B e col2=A e col5=D"
Ou "selecionar * da tabela1 onde col3=B" não usará o índice, ou o efeito não é perceptível

3. Um índice composto substituirá um único índice?
Muitas pessoas acham que adicionar qualquer campo ao índice agrupado pode melhorar a velocidade da consulta, mas algumas ficam confusas: se os campos do índice agrupado composto forem consultados separadamente, a velocidade da consulta será desacelerada? Com essa pergunta, vamos analisar a seguinte velocidade de consulta (o conjunto de resultados é de 250.000 dados) :( a coluna de data fariqi ocupa o primeiro lugar na coluna inicial do índice de agregação composta, e o nome de usuário neibuyonghu fica em segundo lugar)

IDX1:create   index   idx1   on   Tgongwen(fariqi,neibuyonghu)  

(1) selecionar gid, fariqi, neibuyonghu, título de Tgongwen
onde Fariqi>'2004-5-5'

Velocidade de consulta: 2513 ms

(2) selecione gid, fariqi, neibuyonghu, título de Tgongwen
onde fariqi>'2004-5-5' e neibuyonghu='escritório'

Velocidade da consulta: 2516 ms

(3) selecione gid, fariqi, neibuyonghu, título de Tgongwen
onde neibuyonghu='escritório'

Velocidade de consulta: 60280 milissegundos

A partir dos experimentos acima, podemos ver que, se apenas a coluna inicial do índice agrupado for usada como condição de consulta, a velocidade de consulta de todas as colunas com o índice agrupado composto é quase a mesma, até um pouco mais rápida do que usando todas as colunas de índice compostas (quando o número de conjuntos de resultados de consulta é o mesmo). Se apenas as colunas não iniciais do índice agregado composto forem usadas como condições de consulta, esse índice não fará nada. Claro, a velocidade de consulta das instruções 1 e 2 é a mesma porque o número de entradas na consulta é o mesmo; se todas as colunas do índice composto forem usadas e os resultados forem poucos, isso formará uma "sobreposição de índice", para que o desempenho possa ser otimizado. Além disso, lembre-se de que, independentemente de você usar ou não outras colunas no índice agregado com frequência, a coluna inicial deve ser a mais usada com frequência.

[Ref: Esquema de Otimização de Consultas e Algoritmo de Paginação http://blog.csdn.net/chiefsailor/archive/2007/05/28/1628339.aspx]

4. Preciso criar um único índice e um índice composto na mesma coluna ao mesmo tempo?
Experimento: Sysbase 5.0 tabela 1 campos: col1, col2, col3  

Etapas do Teste:  
(1) Criar o índice idx1 no col1  
  Execute select * da tabela1 onde col1=A usa idx1  
  Execute select * da tabela1, onde col1=A e col2=B também usam idx1  

(2) Exclua o índice idx1 e então crie um idx2 no índice composto (col1,col2)  
  Ambas as consultas usam idx2  

(3) Se ambos os índices idx1 e idx2 existirem  
  Não é onde col1='A' usa idx1; onde col1=A e col2=B usam idx2.  
  Seu otimizador de consultas utiliza um dos índices anteriormente comumente utilizados. Use idx1 ou idx2.  
   
Pode-se ver que
(1) Para uma tabela, se houver um índice composto em (col1, col2), não há necessidade de criar um único índice em col1 ao mesmo tempo.
(2) Se as condições de consulta exigirem, você pode adicionar o índice composto em (col1, col2) quando já existe um único índice em col1, o que pode melhorar a eficiência até certo ponto.
(3) Não há muitos benefícios em estabelecer um índice composto com múltiplos campos (contendo 5 ou 6 campos) ao mesmo tempo, relativamente falando, estabelecer um índice com múltiplos campos estreitos (contendo apenas um, ou no máximo 2 campos) pode alcançar maior eficiência e flexibilidade.



5. Preciso cobrir a consulta?
Geralmente é melhor não adotar uma estratégia que enfatize a cobertura total da consulta. Se todas as colunas da cláusula Select forem sobrescritos por um índice não agrupado, o otimizador reconhecerá isso e fornecerá bom desempenho. No entanto, isso frequentemente resulta em um índice excessivamente amplo e dependência excessiva da probabilidade de o otimizador usar a política. Normalmente, índices estreitos são usados para um número maior de consultas, o que proporciona melhor desempenho para consultas grandes.




Anterior:O Winform em C# impede a injeção de SQL
Próximo:Códigos de Erro e Soluções de Servidores Dell Edição 2013
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com