É possível adicionar cegamente índices ausentes?

21

Costumo usar o SSMS para testar meus procedimentos armazenados lentos quanto a índices ausentes. Sempre que vejo um "Índice ausente (Impacto xxx)", minha reação instintiva é apenas criar o novo índice. Isso resulta em uma consulta mais rápida todas as vezes, até onde eu sei.

Alguma razão para eu não continuar fazendo isso?

OO
fonte
1
você pode me dizer de onde posso obter esse recurso de índice ausente?
Ali Raza Iftikhar

Respostas:

27

Muitas razões.

Uma das maiores em que consigo pensar é que os DMVs de índice ausentes não levam em consideração os índices existentes.

Exemplo:

Você tem uma mesa com ColA, ColB, ColC.

Atualmente você tem um índice em ColA. O DMV de índice ausente sugere que você adicione um índice (ColA, ColB). Isso pode estar correto, mas a coisa mais inteligente a fazer é adicionar ColBcomo uma segunda chave no índice existente. Caso contrário, você terá cobertura duplicada, espaço desperdiçado e sobrecarga.

Da mesma forma, se você tiver um índice ColB INCLUDE (ColA), pode sugerir um índice ColB INCLUDE (ColC). Novamente, a coisa mais inteligente a fazer é adicionar ColCà lista de inclusão no índice existente.

Os índices sugeridos têm uma visão extremamente restrita - eles olham apenas para uma única consulta ou para uma única operação em uma única consulta. Eles não levam em conta o que já existe ou seus outros padrões de consulta.

Você ainda precisa de um ser humano pensante para analisar a estratégia geral de indexação e garantir que a estrutura do índice seja eficiente e coesa.

Se não houvesse problemas em adicionar todos os índices sugeridos, não haveria necessidade de sugeri-los - eles seriam implementados automaticamente.

JNK
fonte
Entendo, talvez seja por isso que eu tenha um bazilhão de índices. Acho que devo tentar entender melhor esses planos de explicação e descobrir os índices manualmente.
OO
Se você pesquisar no Google duplicate index scriptsou algo semelhante, existem muitos recursos para rastrear essas coisas. Eu gerencio a maioria dos meus próprios índices e sei um pouco sobre isso, mas ainda encontro enganos de tempos em tempos.
JNK
"Você ainda precisa de um ser humano pensante para analisar a estratégia geral de indexação e garantir que a estrutura do índice seja eficiente e coesa". +1! Como consultor, tive todos os tipos de clientes em todos os tipos de situações. Às vezes, recebo esses clientes porque eles têm índices demais (e errados, redundantes etc.) - todos sugeridos pelo orientador de otimização do mecanismo de banco de dados.
Mike Walsh
@ JNK - eu vou fazer isso.
OO
2
Ótimo ponto - a sobreposição de índices é definitivamente a maior coisa a se observar aqui. E, é claro, quanto mais índices você tiver, mais lenta será a inserção, mais a possibilidade de manutenção (adicionando complexidade) etc.
Jeff Atwood
8

Eu recomendo o uso cauteloso dessa técnica de ajuste, pois acho que as sugestões de índice ausentes exibidas pelos planos de consulta são consistentemente menos confiáveis, pois as consultas e os esquemas de banco de dados se tornam progressivamente mais complexos. Isso ocorreu devido a uma variedade de razões em minha experiência:

1) A "porcentagem de melhoria" pode ser muito difícil para todas as consultas, exceto as mais simples / os índices mais óbvios, afinal é apenas uma estimativa e não deriva dos custos reais incorridos ou das contas reais quando a consulta é executada. Vi custos de consulta subirem após a implementação de um índice sugerido, ou ele nem se acostuma e o plano permanece o mesmo.

2) O plano de consulta em si não é ideal, devido à construção da consulta (junções e cláusula where não otimizada, etc), ou as estimativas de contagem de linhas estão desativadas devido a estatísticas ausentes / desatualizadas. A indexação para um plano de consulta brutalmente ruim geralmente é, na melhor das hipóteses, uma solução de band-aid com apenas uma melhoria incremental no desempenho.

3) Você pode não estar vendo a imagem inteira. Isso é especialmente verdadeiro ao usar apenas o plano gráfico e não exibir o XML para ver se mais de um índice ausente foi sugerido. O primeiro mostrado no plano gráfico não é necessariamente aquele com maior impacto na consulta.

4) Também encontrei muitos exemplos de novos índices sugeridos ao modificar o índice existente. Veja as outras respostas aqui sobre esse ponto, elas estão no local, não há necessidade de eu aprofundar.

Eu só uso as sugestões de índice ausentes como ponto de partida ao trabalhar com uma consulta / ambiente desconhecido para ver onde procurar mais. Eu obtive melhores resultados observando os operadores no plano (principalmente as buscas / verificações / junções) e verificando a dica de ferramenta ou a janela de propriedades para ver quais colunas estão envolvidas e usando isso para determinar os candidatos a índices para testar a melhoria.

FloorDivision
fonte
2

Há várias razões, principalmente - sabendo como os índices funcionam e armazenados - você sempre criará um índice melhor, ou pelo menos - não pior, que as sugestões do SSMS

Oleg Dok
fonte