Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL 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:
- Ladění neclusterovaných indexů s využitím návrhů týkajících se chybějících indexů
- sys.dm_db_missing_index_columns (Transact-SQL)
- sys.dm_db_missing_index_groups (Transact-SQL)
- sys.dm_db_missing_index_group_stats (Transact-SQL)
- sys.dm_db_missing_index_group_stats_query (Transact-SQL)
- sys.dm_os_sys_info (Transact-SQL)