Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-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:
- Nem klaszterezett indexek optimalizálása hiányzó indexjavaslatokkal
- 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)