Sdílet prostřednictvím


sys.dm_db_missing_index_details (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Vrací podrobné informace o chybějících indexech.

V Azure SQL Database nemůžou zobrazení dynamické správy zveřejnit informace, které by ovlivnily zahrnutí databáze nebo zpřístupňují informace o jiných databázích, ke kterým má uživatel přístup. Aby se zabránilo zveřejnění těchto informací, vyfiltruje se každý řádek obsahující data, která nepatří do připojeného tenanta.

Název sloupce Datový typ Description
index_handle int Identifikuje konkrétní chybějící index. Identifikátor je jedinečný napříč serverem. index_handle je klíčem této tabulky.
database_id smallint Identifikuje databázi, ve které se tabulka s chybějícím indexem nachází.

Ve službě Azure SQL Database jsou hodnoty jedinečné v rámci jedné databáze nebo elastického fondu, ale ne v rámci logického serveru.
object_id int Identifikuje tabulku, kde index chybí.
equality_columns nvarchar(4000) Seznam sloupců oddělených čárkami, které přispívají k rovnostním predikátem tvaru:

table.column = constant_value
inequality_columns nvarchar(4000) Seznam sloupců oddělených čárkami, které přispívají k nerovnostem, například predikáty tvaru:

table.column>constant_value

Každý srovnávací operátor jiný než "=" vyjadřuje nerovnost.
included_columns nvarchar(4000) Seznam sloupců oddělených čárkami potřebný jako pokrývací sloupce pro dotaz. Pro více informací o pokrývajících nebo zahrnutých sloupcích viz Vytvářet indexy s zahrnutými sloupci.

Pro paměťově optimalizované indexy (jak hash, tak paměťově optimalizované bez clusterů) ignorujte included_columns. Všechny sloupce tabulky jsou zahrnuty v každém indexu optimalizovaném pro paměť.
výrok nvarchar(4000) Název tabulky, kde index chybí.

Poznámky

Informace vrácené pomocí jsou sys.dm_db_missing_index_details aktualizovány, když je dotaz optimalizován optimalizátorem dotazů, a nejsou uchovávány. Chybějící informace v indexu jsou uchovávány pouze do restartu databázového enginu. Správci databáze by měli pravidelně vytvářet záložní kopie chybějících indexových informací, pokud je chtějí po recyklaci serveru zachovat. Pomocí sloupce sqlserver_start_time v sys.dm_os_sys_info vyhledejte čas posledního spuštění databázového stroje.

Pro určení, do kterých skupin chybějících indexů je daný chybějící index součástí, můžete dotazovat sys.dm_db_missing_index_groups pohled dynamické správy tím, že jej spojíte s na sys.dm_db_missing_index_details základě sloupce index_handle .

Poznámka:

Výsledná sada pro toto DMV je omezena na 600 řádků. Každý řádek obsahuje jeden chybějící rejstřík. Pokud máte více než 600 chybějících indexů, měli byste řešit stávající chybějící indexy, abyste pak mohli vidět ty novější.

Použití chybějících indexových informací v příkazech CREATE INDEX

Pro převod informací vrácených by sys.dm_db_missing_index_details do příkazu CREATE INDEX pro indexy optimalizované jak pro paměť, tak pro diskové indexy, měly by být sloupce rovnosti umístěny před sloupce nerovnosti a společně by měly tvořit klíč indexu. Zahrnuté sloupce by měly být přidány do příkazu CREATE INDEX pomocí klauzule INCLUDE. Pokud chcete určit efektivní pořadí sloupců rovnosti, seřadte je na základě jejich selektivity: nejprve vypište nejlektivnější sloupce (úplně vlevo v seznamu sloupců). Více informací v Ladění neklastrovaných indexů s chybějícími indexovými návrhy, včetně omezení funkce chybějícího indexu.

Pro více informací o indexech optimalizovaných pro paměť viz Indexy pro Memory-Optimized tabulky.

Konzistence transakcí

Pokud transakce vytvoří nebo zanechá tabulku, řádky obsahující chybějící indexové informace o ztracených objektech jsou z tohoto dynamického objektu správy odstraněny, čímž je zachována konzistence transakcí. Zjistěte více o omezeních chybějící funkce indexu.

Povolení

Na SQL Serveru a službě SQL Managed Instance vyžaduje VIEW SERVER STATE oprávnění.

U cílů služby SQL Database Basic, S0 a S1 a pro databáze v elastických fondech se vyžaduje účet správce serveru , účet správce Microsoft Entra nebo členství v ##MS_ServerStateReader##roli serveru . U všech ostatních cílů VIEW DATABASE STATE služby SQL Database se vyžaduje buď oprávnění k databázi, nebo členství v ##MS_ServerStateReader## roli serveru.

Oprávnění pro SQL Server 2022 a novější

Vyžaduje oprávnění ZOBRAZIT STAV VÝKONU SERVERU na serveru.

Examples

Následující příklad vrací chybějící indexové návrhy pro aktuální databázi. Chybějící návrhy indexů by měly být pokud možno kombinovány mezi sebou a s existujícími indexy v aktuální databázi. Naučte se, jak tyto návrhy aplikovat v ladění, aby byly indexy bez shluku naladěny.

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

Poznámka:

Skript pro tvorbu indexů v Nástrojovém setu Tiger od společnosti Microsoft prozkoumá chybějící zobrazení dynamické správy indexů, automaticky odebere všechny redundantní navrhované indexy, odstraní indexy s nízkým dopadem a generuje skripty pro vytváření indexů pro vaši kontrolu. Stejně jako v dotazu výše, NEPROVÁDÍ příkazy pro tvorbu indexu. Skript pro vytvoření indexu je vhodný pro SQL Server a spravovanou instanci Azure SQL. Pro Azure SQL Database zvažte implementaci automatického ladění indexu.

Další kroky

Více o chybějící funkci indexu se dozvíte v následujících článcích: