Megosztás a következőn keresztül:


sys.dm_db_missing_index_details (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Részletes információkat ad a hiányzó indexekről.

Az Azure SQL Database-ben a dinamikus felügyeleti nézetek nem tehetnek közzé olyan információkat, amelyek hatással lennének az adatbázis-elszigetelésre, vagy nem tehetnek közzé információkat más olyan adatbázisokról, amelyekhez a felhasználó hozzáfér. Az információk felfedésének elkerülése érdekében a rendszer kiszűr minden olyan sort, amely nem a csatlakoztatott bérlőhöz tartozó adatokat tartalmaz.

Oszlop név Adattípus Description
index_handle int Azonosít egy bizonyos hiányzó indexet. Az azonosító egyedi a szerveren belül. index_handle ez a kulcs ennek az asztalnak.
database_id smallint Azonosítja azt az adatbázist, ahol a hiányzó indexgel rendelkező tábla található.

Az Azure SQL Database-ben az értékek egyediek egyetlen adatbázisban vagy rugalmas készletben, de nem logikai kiszolgálón belül.
object_id int Azonosítja azt a táblát, ahol az index hiányzik.
equality_columns nvarchar(4000) Vesszővel elválasztott lista azokról az oszlopokról, amelyek hozzájárulnak az egyenlőség predikátumához az alábbi formában:

table.oszlop = constant_value
inequality_columns nvarchar(4000) Vesszővel elválasztott lista azokról az oszlopokról, amelyek hozzájárulnak az egyenlőtlenséghez predikátumokhoz, például a következő formában lévő predikátumok:

table.oszlop>constant_value

Bármely összehasonlító operátor, a "="-n kívül, egyenlőtlenséget fejez ki.
included_columns nvarchar(4000) Vesszővel elválasztott lista a lekérdezéshez szükséges oszlopokról. További információért a fedő vagy beépített oszlopokról lásd : Létrehozni az Indexeket bevont oszlopokkal.

Memóriára optimalizált indexeknél (hash-es és memóriaoptimalizált nem klaszterek) esetén figyelmen kívül included_columnshagyjuk . A táblázat minden oszlopa minden memóriaoptimalizált indexben szerepel.
állítás nvarchar(4000) Annak a táblázatnak a neve, ahol az index hiányzik.

Megjegyzések

A visszaküldött sys.dm_db_missing_index_details információk frissülnek, amikor a lekérdezésoptimalizáló egy lekérdezést optimalizál, és nem marad fenn. A hiányzó indexinformációk csak addig maradnak meg, amíg az adatbázis motort újraindítják. Az adatbázis-adminisztrátoroknak időnként készíteniük kell a hiányzó indexinformációkat, ha azt a szerver újrahasznosítása után is meg akarják tartani. A sqlserver_start_time oszlopával keresse meg az adatbázismotor utolsó indítási idejét.

Annak meghatározására, hogy egy adott hiányzó index melyik hiányzó indexcsoporthoz tartozik, a dinamikus menedzsment nézetet lekérdezhetjük sys.dm_db_missing_index_groups az oszlop alapján egyenértékű indexekkel sys.dm_db_missing_index_detailsindex_handle .

Megjegyzés:

Ennek a DMV-nek az eredménykészlete 600 sorra korlátozott. Minden sorban egy hiányzó index található. Ha több mint 600 hiányzó indexed van, akkor kezeld a meglévő hiányzó indexeket, hogy így megnézhesd az újabbakat.

Hiányzó indexinformációk használata a CREATE INDEX utasításokban

Ahhoz, hogy a visszaküldött sys.dm_db_missing_index_details információt CREATE INDEX utasítássá alakítsuk mind a memóriaoptimalizált, mind a lemezalapú indexekhez, egyenlőségi oszlopokat kell az egyenlőtlenségi oszlopok elé helyezni, és együtt alkotják az index kulcsát. A mellékelt oszlopokat a CREATE INDEX utasításhoz a INCLUDE záradékon keresztül kell hozzáadni. Az egyenlőségi oszlopok tényleges sorrendjének meghatározásához rendezze őket a szelektivitásuk alapján: először a legválogatottabb oszlopokat listázzuk (az oszloplistában a bal szélsőt). További információ a Tune nem klaszterelt indexekről hiányzó indexjavaslatokkal, beleértve a hiányzó index funkció korlátait.

További információért a memóriaoptimalizált indexekről lásd: Indexes for Memory-Optimized Tables.

Tranzakciókonzisztenciás

Ha egy tranzakció létrehoz vagy eltávolít egy táblát, a hiányzó indexinformációkat tartalmazó sorokat eltávolítják ebből a dinamikus menedzsment objektumból, megőrizve a tranzakciókonzisztenciát. Tudjon meg többet a hiányzó index funkció korlátairól.

Permissions

Az SQL Serveren és a felügyelt SQL-példányon VIEW SERVER STATE engedély szükséges.

Az SQL Database Alapszintű, S0és S1 szolgáltatás célkitűzésein, valamint rugalmas készletekbenlévő adatbázisok esetében a kiszolgálói rendszergazdai fiókra, a Microsoft Entra rendszergazdai fiókra vagy a ##MS_ServerStateReader##kiszolgálói szerepkör tagságára van szükség. Az SQL Database szolgáltatás minden más célkitűzéséhez vagy az adatbázis VIEW DATABASE STATE engedélyére, vagy a ##MS_ServerStateReader## kiszolgálói szerepkör tagságára van szükség.

Engedélyek az SQL Server 2022-hez és újabb verziókhoz

A KISZOLGÁLÓ TELJESÍTMÉNYÁLLAPOTÁNAK MEGTEKINTÉSE engedélyre van szükség a kiszolgálón.

Példák

A következő példa hiányzó indexjavaslatokat ad vissza a jelenlegi adatbázishoz. A hiányzó indexjavaslatokat lehetőség szerint egymással és a jelenlegi adatbázisban lévő indexekkel kell kombinálni. Tanuld meg, hogyan alkalmazd ezeket a javaslatokat a nem klaszterezett indexek hangolójában, amelyekben hiányzó indexjavaslatok vannak.

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

Megjegyzés:

A Microsoft Tiger Toolboxindex-létrehozási szkriptje megvizsgálja a hiányzó index DMV-ket, és automatikusan eltávolítja a feleslegesen javasolt indexeket, elemzi az alacsony hatású indexeket, és indexlétrehozó szkripteket hoz létre a felülvizsgálathoz. Ahogy a fenti lekérdezésben is, NEM hajt végre indexalkotó parancsokat. Az Index-Létrehozás szkript az SQL Serverhez és a felügyelt Azure SQL-példányhoz használható. Az Azure SQL Database esetében fontolja meg az automatikus indexhangolás implementálását.

Következő lépések

További információk a hiányzó indexfunkcióról a következő cikkekben találhatók: