Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Devolve informações detalhadas sobre índices em falta.
No Banco de Dados SQL do Azure, as exibições de gerenciamento dinâmico não podem expor informações que possam afetar a contenção do banco de dados ou expor informações sobre outros bancos de dados aos quais o usuário tem acesso. Para evitar a exposição dessas informações, todas as linhas que contêm dados que não pertencem ao locatário conectado são filtradas.
| Nome da coluna | Tipo de dados | Description |
|---|---|---|
| index_handle | int | Identifica um índice específico em falta. O identificador é único em todo o servidor.
index_handle é a chave desta tabela. |
| database_id | smallint | Identifica a base de dados onde reside a tabela com o índice em falta. No Banco de Dados SQL do Azure, os valores são exclusivos em um único banco de dados ou pool elástico, mas não em um servidor lógico. |
| object_id | int | Identifica a tabela onde falta o índice. |
| equality_columns | Nvarchar(4000) | Lista separada por vírgulas de colunas que contribuem para predicados de igualdade da forma: tabela.coluna = constant_value |
| inequality_columns | Nvarchar(4000) | Lista separada por vírgulas de colunas que contribuem para predicados de desigualdade, por exemplo, predicados da forma: tabela.coluna>constant_value Qualquer operador de comparação que não "=" expressa desigualdade. |
| included_columns | Nvarchar(4000) | Lista separada por vírgulas de colunas necessárias como colunas de cobertura para a consulta. Para mais informações sobre colunas de cobertura ou incluídas, consulte Criar Índices com Colunas Incluídas. Para índices otimizados para memória (tanto para hash como para memória não agrupados), ignore included_columns. Todas as colunas da tabela estão incluídas em todos os índices otimizados para memória. |
| Declaração | Nvarchar(4000) | Nome da tabela onde falta o índice. |
Observações
A informação devolvida por sys.dm_db_missing_index_details é atualizada quando uma consulta é otimizada pelo otimizador de consultas e não é mantida. A informação de índice em falta é mantida apenas até o motor da base de dados ser reiniciado. Os administradores de bases de dados devem periodicamente fazer cópias de segurança da informação do índice em falta se quiserem mantê-la após a reciclagem do servidor. Use a sqlserver_start_time coluna no sys.dm_os_sys_info para localizar a última hora de inicialização do mecanismo de banco de dados.
Para determinar a que grupos de índice em falta pertence um determinado índice em falta, pode consultar a sys.dm_db_missing_index_groups vista de gestão dinâmica juntando-a com sys.dm_db_missing_index_details base na index_handle coluna.
Observação
O conjunto de resultados para este IMT está limitado a 600 filas. Cada linha contém um índice em falta. Se tiver mais de 600 índices em falta, deve abordar os índices existentes em falta para depois poder ver os mais recentes.
Utilização de informação de índice em falta nas instruções CREATE INDEX
Para converter a informação devolvida numa sys.dm_db_missing_index_details instrução CREATE INDEX tanto para índices otimizados para memória como baseados em disco, as colunas de igualdade devem ser colocadas antes das colunas de desigualdade e, juntas, devem formar a chave do índice. As colunas incluídas devem ser adicionadas à instrução CREATE INDEX usando a cláusula INCLUDE. Para determinar uma ordem efetiva para as colunas de igualdade, ordene-as com base em sua seletividade: liste as colunas mais seletivas primeiro (mais à esquerda na lista de colunas). Saiba mais em Ajustar índices não agrupados com sugestões de índice em falta, incluindo Limitações da funcionalidade de índice em falta.
Para mais informações sobre índices otimizados para memória, consulte Índices para Memory-Optimized Tabelas.
Consistência de transações
Se uma transação criar ou eliminar uma tabela, as linhas que contêm informação de índice em falta sobre os objetos descartados são removidas deste objeto de gestão dinâmica, preservando a consistência da transação. Saiba mais sobre as limitações da funcionalidade de índice em falta.
Permissions
No SQL Server e na Instância Gerenciada do SQL, requer VIEW SERVER STATE permissão.
No Banco de Dados SQL Basic, S0e S1 objetivos de serviço e para bancos de dados em pools elásticos , a conta de de administrador do servidor, a conta de de administrador do Microsoft Entra ou a associação aode função de servidor ##MS_ServerStateReader## é necessária. Em todos os outros objetivos de serviço do Banco de dados SQL, é necessária a permissão VIEW DATABASE STATE no banco de dados ou a associação à função de servidor ##MS_ServerStateReader##.
Permissões para SQL Server 2022 e posterior
Requer a permissão VIEW SERVER PERFORMANCE STATE no servidor.
Examples
O exemplo seguinte devolve sugestões de índice em falta para a base de dados atual. Sugestões de índice em falta devem ser combinadas, sempre que possível, entre si e com índices existentes na base de dados atual. Aprenda a aplicar estas sugestões para ajustar índices não agrupados com sugestões de índice em falta.
SELECT
CONVERT (varchar(30), getdate(), 126) AS runtime, mig.index_group_handle, mid.index_handle,
CONVERT (decimal (28, 1), migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) ) AS improvement_measure,
'CREATE INDEX missing_index_' + CONVERT (varchar, mig.index_group_handle) + '_' + CONVERT (varchar, mid.index_handle) + ' ON ' + mid.statement + ' (' + ISNULL (mid.equality_columns, '') + CASE
WHEN mid.equality_columns IS NOT NULL
AND mid.inequality_columns IS NOT NULL THEN ','
ELSE ''
END + ISNULL (mid.inequality_columns, '') + ')' + ISNULL (' INCLUDE (' + mid.included_columns + ')', '') AS create_index_statement,
migs.*, mid.database_id, mid.[object_id]
FROM sys.dm_db_missing_index_groups mig
INNER JOIN sys.dm_db_missing_index_group_stats migs ON migs.group_handle = mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details mid ON mig.index_handle = mid.index_handle
WHERE CONVERT (decimal (28, 1),migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans)) > 10
ORDER BY migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) DESC
Observação
O script de criação de índice no Tiger Toolbox da Microsoft examina DMVs de índice ausentes e remove automaticamente todos os índices sugeridos redundantes, analisa índices de baixo impacto e gera scripts de criação de índice para sua revisão. Tal como na consulta acima, NÃO executa comandos de criação de índice. O script de Criação de Índice é adequado para o SQL Server e a Instância Gerenciada SQL do Azure. Para o Banco de Dados SQL do Azure, considere implementar o ajuste automático de índice.
Próximos passos
Saiba mais sobre a funcionalidade de índice em falta nos artigos seguintes: