Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
Geeft gedetailleerde informatie over ontbrekende indexen.
In Azure SQL Database kunnen dynamische beheerweergaven geen informatie weergeven die van invloed is op databaseinsluiting of informatie weergeven over andere databases waartoe de gebruiker toegang heeft. Om te voorkomen dat deze informatie zichtbaar wordt gemaakt, wordt elke rij met gegevens die geen deel uitmaken van de verbonden tenant uitgefilterd.
| Kolomnaam | Gegevenstype | Description |
|---|---|---|
| index_handle | int | Identificeert een specifieke ontbrekende index. De identificatie is uniek binnen de server.
index_handle is de sleutel van deze tabel. |
| database_id | smallint | Identificeert de database waar de tabel met de ontbrekende index zich bevindt. In Azure SQL Database zijn de waarden uniek binnen één database of een elastische pool, maar niet binnen een logische server. |
| object_id | int | Identificeert de tabel waarin de index ontbreekt. |
| equality_columns | nvarchar(4000) | Comma-gescheiden lijst van kolommen die bijdragen aan gelijkheidspredicaten van de vorm: table.column = constant_value |
| inequality_columns | nvarchar(4000) | Comma-gescheiden lijst van kolommen die bijdragen aan ongelijkheidspredicaten, bijvoorbeeld predicaten van de vorm: table.column>constant_value Elke vergelijkingsoperator anders dan "=" drukt ongelijkheid uit. |
| included_columns | nvarchar(4000) | Comma-gescheiden lijst van kolommen die nodig zijn als dekkende kolommen voor de query. Voor meer informatie over het bedekken of opgenomen kolommen, zie Indexen aanmaken met opgenomen kolommen. Voor geheugen-geoptimaliseerde indexen (zowel hash- als geheugengeoptimaliseerde niet-geclusterde), negeer included_columns. Alle kolommen van de tabel zijn opgenomen in elke geheugengeoptimaliseerde index. |
| verklaring | nvarchar(4000) | Naam van de tabel waar de index ontbreekt. |
Opmerkingen
Informatie die door sys.dm_db_missing_index_details wordt teruggestuurd, wordt bijgewerkt wanneer een query wordt geoptimaliseerd door de queryoptimizer en wordt niet behouden. Ontbrekende indexinformatie wordt alleen bewaard totdat de database-engine opnieuw is opgestart. Databasebeheerders zouden periodiek back-ups moeten maken van de ontbrekende indexinformatie als ze deze na serverrecycling willen behouden. Gebruik de kolom sqlserver_start_time in sys.dm_os_sys_info om de laatste opstarttijd van de database-engine te vinden.
Om te bepalen bij welke ontbrekende indexgroepen een bepaalde ontbrekende index hoort, kun je de sys.dm_db_missing_index_groups dynamische beheerweergave bevragen door deze te equijoinen met sys.dm_db_missing_index_details op basis van de index_handle kolom.
Opmerking
De uitkomsten voor deze DMV zijn beperkt tot 600 rijen. Elke rij bevat één ontbrekende index. Als je meer dan 600 ontbrekende indexen hebt, moet je de bestaande ontbrekende indexen aanpakken zodat je daarna de nieuwere kunt bekijken.
Gebruik van ontbrekende indexinformatie in CREATE INDEX-instructies
Om de door de door gegenereerde sys.dm_db_missing_index_details informatie om te zetten in een CREATE INDEX-instructie voor zowel geheugengeoptimaliseerde als schijfgebaseerde indexen, moeten gelijkheidskolommen vóór de ongelijkheidskolommen worden geplaatst, en samen zouden ze de sleutel van de index moeten vormen. Opgenomen kolommen moeten worden toegevoegd aan de CREATE INDEX-instructie met behulp van de INCLUDE-clausule. Als u een effectieve volgorde voor de gelijkheidskolommen wilt bepalen, rangschikt u ze op basis van hun selectiviteit: geef eerst de meest selectieve kolommen weer (meest links in de kolomlijst). Lees meer in Tune non-clustered indexes with missing index-suggesties, inclusief Beperkingen van de missing index-functie.
Voor meer informatie over geheugen-geoptimaliseerde indexen, zie Indexen voor Memory-Optimized Tabellen.
Transactieconsistentie
Als een transactie een tabel aanmaakt of verwijdert, worden de rijen met ontbrekende indexinformatie over de gedropte objecten uit dit dynamische beheerobject verwijderd, waardoor de consistentie van de transactie behouden blijft. Lees meer over de beperkingen van de ontbrekende indexfunctie.
Permissions
Voor SQL Server en SQL Managed Instance is een machtiging vereist VIEW SERVER STATE .
Voor servicedoelstellingen van SQL Database Basic, S0 en S1 en voor databases in elastische pools is het serverbeheerdersaccount , het Microsoft Entra-beheerdersaccount of het lidmaatschap van de ##MS_ServerStateReader##serverrol vereist. Voor alle andere SQL Database-servicedoelstellingen is de VIEW DATABASE STATE machtiging voor de database of het lidmaatschap van de ##MS_ServerStateReader## serverfunctie vereist.
Machtigingen voor SQL Server 2022 en hoger
Vereist de machtiging PRESTATIESTATUS VAN DE WEERGAVESERVER op de server.
Voorbeelden
Het volgende voorbeeld geeft suggesties voor ontbrekende indexen voor de huidige database. Ontbrekende indexsuggesties moeten waar mogelijk worden gecombineerd met elkaar en met bestaande indexen in de huidige database. Leer hoe je deze suggesties toepast om niet-geclusterde indexen met ontbrekende indexsuggesties af te stemmen.
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
Opmerking
Het script voor het maken van indexen in de Tiger Toolbox van Microsoft onderzoekt ontbrekende index-DMV's en verwijdert automatisch overbodige voorgestelde indexen, parseert indexen met lage impact en genereert scripts voor het maken van indexen voor uw beoordeling. Zoals in de bovenstaande query voert het GEEN indexcreatiecommando's uit. Het script voor het maken van indexen is geschikt voor SQL Server en Azure SQL Managed Instance. Voor Azure SQL Database kunt u overwegen automatische indexafstemming te implementeren.
Volgende stappen
Lees meer over de ontbrekende indexfunctie in de volgende artikelen:
- Niet-geclusterde indexen afstemmen met behulp van suggesties voor ontbrekende indexen
- 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)