Compartilhar via


Limitações do recurso de índices ausentes

O recurso índice ausente tem as seguintes limitações:

  • Ele não tem o objetivo de otimizar uma configuração de indexação.

  • Não consegue reunir estatísticas com mais de 500 grupos de índices ausentes.

  • Ele não especifica uma ordem de colunas a serem usadas em um índice.

  • Para as consultas que envolvem somente predicados de desigualdade, ele retorna informações de custos menos precisas.

  • Ele informa somente a inclusão de colunas para algumas consultas, portanto as colunas de chave de índices devem ser selecionadas manualmente.

  • Ele retorna somente informações não-processadas sobre colunas, nas quais os índices podem estar ausentes.

  • Ele não sugere índices filtrados.

  • Ele pode retornar diferentes custos para o mesmo grupo de índice ausente que aparece diversas vezes nos planos de execução XML.

  • Ele não considera planos de consulta triviais.

As seções a seguir fornecem mais informações sobre estas limitações.

Otimização da configuração de indexação

O recurso de índices ausentes é uma ferramenta simples para encontrar índices ausentes que pode melhorar significativamente o desempenho da consulta. Ele não fornece informações adequadas para otimizar sua configuração de indexação. Use o Orientador de Otimização do Mecanismo de Banco de Dados para esse propósito. Para obter mais informações sobre o Orientador de Otimização do Mecanismo de Banco de Dados, consulte Ajustando o design do banco de dados físicoe Recursos de ajuste de consulta relacionados.

Número máximo de grupos de índices ausentes

São reunidas no máximo estatísticas de 500 grupos de índices ausentes. Não serão mais reunidos dados de grupo de índice ausente depois que este limite for atingido. Esse limite não é um parâmetro ajustável e não pode ser alterado.

Classificação da coluna de índice

O recurso de índices ausentes não considera a ordem de classificação ideal ao sugerir um índice. Considere o exemplo de consulta a seguir.

SELECT column_a, column_b
FROM table_1
WHERE column_a < 10000
AND column_b < 10000
ORDER BY column_b, column_a

O recurso de índices ausentes pode sugerir um índice e pode listar column_a antes de column_b, mas a ordem de classificação vantajosa seria column_b, column_a que corresponde à ordem de classificação da consulta. Ao criar a instrução DDL (linguagem de definição de dados) para implementar um índice ausente, escolha a ordem de classificação ideal examinando as consultas individuais de carga de trabalho. Para obter mais informações sobre como ordenar colunas nas instruções CREATE INDEX com base na saída recebida do recurso de índices ausentes, consulte Usando informações de índice ausente para gravar instruções CREATE INDEX.

Consultas que envolvem somente predicados de desigualdade

O recurso de índice ausente usa um modelo simplista para gerar informações de custo para consultas que envolvem somente predicados de desigualdade. Como conseqüência, as informações de custo retornadas para estas consultas podem ser menos precisas que as informações retornadas para consultas que envolvem igualdades. Considere a consulta de exemplo a seguir que não contém nenhum predicado de igualdade:

SELECT *
FROM table_1
WHERE column_a > -1
AND column_b > -1

Este exemplo de consulta contém somente um predicado de desigualdade (WHERE column_a > -1 AND column_b > -1). Suponhamos que todas as linhas na table_1 se qualifiquem para os predicados column_a > -1 e column_b > -1. Nesse caso, o recurso de índices ausentes pode recomendar um índice incorretamente em ambas column_a e column_b. Nesse caso, os números de impacto associados relatados pela exibição de gerenciamento dinâmicosys.dm_db_missing_indexes_group_stats também podem estar incorretos.

Retorna a mensagem incluir colunas somente para algumas consultas

Às vezes, o recurso relata somente as informações de uso de coluna para incluir colunas. Por exemplo, o recurso pode relatar colunas de igualdade = { }, colunas de desigualdade = { } e incluir colunas = {b, c, …}. Nesse caso, um dos recursos de incluir colunas deve ser selecionado para a coluna da chave do índice. Use as informações de índice ausente retornadas para outras consultas que se beneficiam de algumas das mesmas colunas para determinar qual dos recursos de incluir colunas devem ser selecionado para a chave de índice.

Retorna somente informações não-processadas

O recurso de índice ausente retorna somente informações não-processadas sobre colunas onde os índices podem estar ausentes. Isto significa que as informações retornadas podem requerer processamento adicional antes de você poder usar as informações para criar um índice.

Por exemplo, se a coluna envolvida for uma coluna computada, e a computação for não-determinística ou imprecisa, a instrução CREATE INDEX naquela coluna falhará. No caso de uma computação imprecisa, a coluna deve primeiro ser persistente e, em seguida, pode-se criar o índice.

Retorna custos diferentes para o mesmo grupo de índice ausente em planos de execução XML

Os grupos de índice ausente podem aparecer diversas vezes em planos de execução XML relatando um custo diferente sempre que o grupo de índice ausente aparece. Isto pode acontecer quando partes diferentes de uma única consulta se beneficiam de forma diferente do mesmo grupo de índice ausente.

Considere o exemplo de consulta seguinte:

SELECT i.CustomerID, c.ModifiedDate, City
FROM NewIndividual i JOIN NewCustomer c ON i.CustomerID = c.CustomerID
                    AND c.CustomerType = 'I'
          JOIN NewCustomerAddress ca ON ca.CustomerID = c.CustomerID
          JOIN NewAddress a ON a.AddressID = ca.AddressID
WHERE i.CustomerID = 16701

Nesta consulta, as duas condições diferentes de junção na coluna CustomerID podem produzir dois grupos de índice ausente idênticos que contêm o mesmo índice na coluna NewIndividual.CustomerID. Neste caso, a exibição de gerenciamento dinâmico sys.dm_db_missing_index_groups teria somente uma linha para o grupo de índice ausente. Porém, o grupo de índice ausente apareceria diversas vezes na saída do plano de execução XML, com custos diferentes para as diversas condições de junção.