Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Returnerar detaljerad information om saknade index.
I Azure SQL Database kan dynamiska hanteringsvyer inte exponera information som skulle påverka databasens inneslutning eller exponera information om andra databaser som användaren har åtkomst till. För att undvika att exponera den här informationen filtreras varje rad som innehåller data som inte tillhör den anslutna klientorganisationen bort.
| Kolumnnamn | Datatyp | Description |
|---|---|---|
| index_handle | int | Identifierar ett särskilt saknat index. Identifieraren är unik över hela servern.
index_handle är nyckeln till denna tabell. |
| database_id | smallint | Identifierar databasen där tabellen med det saknade indexet finns. I Azure SQL Database är värdena unika i en enskild databas eller en elastisk pool, men inte inom en logisk server. |
| object_id | int | Identifierar tabellen där indexet saknas. |
| equality_columns | nvarchar(4000) | Kommaseparerad lista över kolumner som bidrar till likhetspredikat av formen: table.column = constant_value |
| inequality_columns | nvarchar(4000) | Kommaseparerad lista av kolumner som bidrar till olikhetspredikat, till exempel predikat av formen: table.column>constant_value Alla jämförelseoperatorer utom "=" uttrycker olikhet. |
| included_columns | nvarchar(4000) | Kommaseparerad lista över kolumner som behövs som täckande kolumner för frågan. För mer information om täckande eller inkluderade kolumner, se Skapa index med inkluderade kolumner. För minnesoptimerade index (både hash- och minnesoptimerade icke-klustrade), ignorera included_columns. Alla kolumner i tabellen ingår i varje minnesoptimerat index. |
| uttalande | nvarchar(4000) | Namnet på tabellen där indexet saknas. |
Anmärkningar
Information som returneras av sys.dm_db_missing_index_details uppdateras när en fråga optimeras av frågeoptimeraren och behålls inte. Saknad indexinformation sparas endast tills databasmotorn startas om. Databasadministratörer bör regelbundet göra säkerhetskopior av den saknade indexinformationen om de vill behålla den efter serveråtervinning. Använd kolumnen sqlserver_start_time i sys.dm_os_sys_info för att hitta den senaste starttiden för databasmotorn.
För att avgöra vilka saknade indexgrupper ett visst saknat index tillhör kan du fråga i den sys.dm_db_missing_index_groups dynamiska hanteringsvyn genom att ekkvigera den med sys.dm_db_missing_index_details baserat på kolumnen index_handle .
Anmärkning
Resultatet för denna DMV är begränsat till 600 rader. Varje rad innehåller ett saknat index. Om du har mer än 600 saknade index bör du åtgärda de befintliga saknade indexen så att du kan se de nyare.
Användning av saknad indexinformation i CREATE INDEX-satser
För att konvertera informationen som returneras av sys.dm_db_missing_index_details till en CREATE INDEX-sats för både minnesoptimerade och diskbaserade index, bör likhetskolumner placeras före olikhetskolumnerna, och tillsammans ska de bilda nyckeln till indexet. Inkluderade kolumner bör läggas till i satsen CREATE INDEX med hjälp av INCLUDE-klausulen. För att fastställa en effektiv ordning för likhetskolumnerna beställer du dem baserat på deras selektivitet: lista de mest selektiva kolumnerna först (längst till vänster i kolumnlistan). Läs mer i Tune nonclustered index with missing index-förslag, inklusive begränsningar för missing index-funktionen.
För mer information om minnesoptimerade index, se Index för Memory-Optimized tabeller.
Transaktionskonsistens
Om en transaktion skapar eller släpper en tabell tas raderna som innehåller saknad indexinformation om de borttagna objekten bort från detta dynamiska hanteringsobjekt, vilket bevarar transaktionskonsistensen. Läs mer om begränsningarna med den saknade indexfunktionen.
Permissions
På SQL Server och SQL Managed Instance kräver VIEW SERVER STATE behörighet.
I SQL Database Grundläggande, S0och S1 tjänstmål och för databaser i elastiska pooler, serveradministratör konto, Microsoft Entra-administratör konto eller medlemskap i ##MS_ServerStateReader##serverrollen krävs. För alla andra SQL Database-tjänstmål krävs antingen VIEW DATABASE STATE behörighet för databasen eller medlemskap i ##MS_ServerStateReader## serverrollen.
Behörigheter för SQL Server 2022 och senare
Kräver BEHÖRIGHET FÖR VISNINGSSERVERNS PRESTANDATILLSTÅND på servern.
Examples
Följande exempel ger förslag på saknade index för den aktuella databasen. Saknade indexförslag bör kombineras när det är möjligt med varandra och med befintliga index i den nuvarande databasen. Lär dig hur du kan tillämpa dessa förslag i takt med icke-klustrade index med saknade indexförslag.
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
Anmärkning
Skriptet Index-Creation i Microsofts Tiger Toolbox undersöker saknade index-DMV:er och tar automatiskt bort alla redundanta föreslagna index, parsar ut index med låg påverkan och genererar skript för att skapa index för din granskning. Som i frågan ovan utför den INTE indexskapandekommandon. Skriptet Index-Creation är lämpligt för SQL Server och Azure SQL Managed Instance. Överväg att implementera automatisk indexjustering för Azure SQL Database.
Nästa steg
Läs mer om den saknade indexfunktionen i följande artiklar: