Delen via


sys.dm_db_missing_index_group_stats_query (Transact-SQL)

Van toepassing op: SQL Server 2019 (15.x) en latere versies Van Azure SQL DatabaseAzure SQL Managed InstanceSQL Database in Microsoft Fabric

Geeft informatie terug over zoekopdrachten die een ontbrekende index nodig hadden van groepen ontbrekende indexen, exclusief ruimtelijke indexen. Er kunnen per ontbrekende indexgroep meer dan één query worden teruggegeven. Een ontbrekende indexgroep kan meerdere queries hebben die dezelfde index nodig hadden.

In Azure SQL Database kunnen dynamische beheerweergaven geen informatie blootstellen die de database-inhoud zou beïnvloeden, of informatie over andere databases waar de gebruiker toegang toe 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
group_handle int Identificeert een groep ontbrekende indexen. Deze identificatie is uniek binnen de server.

De andere kolommen geven informatie over alle zoekopdrachten waarvoor de index in de groep als ontbrekend wordt beschouwd.

Een indexgroep bevat slechts één index.

Kan in sys.dm_db_missing_index_groups worden aangeslotenindex_group_handle.
query_hash binary(8) Binaire hashwaarde die wordt berekend op de query en wordt gebruikt om query's met vergelijkbare logica te identificeren. U kunt de query-hash gebruiken om het geaggregeerde resourcegebruik te bepalen voor query's die alleen verschillen per letterlijke waarden.
query_plan_hash binary(8) Binaire hashwaarde berekend op het queryuitvoeringsplan en wordt gebruikt om vergelijkbare queryuitvoeringsplannen te identificeren. U kunt hash van het queryplan gebruiken om de cumulatieve kosten van query's met vergelijkbare uitvoeringsplannen te vinden.

Altijd 0x000 wanneer een native gecompileerde opgeslagen procedure een geheugengeoptimaliseerde tabel bevraagt.
last_sql_handle varbinary(64) Een token dat uniek de batch- of opgeslagen procedure identificeert van de laatst gecompileerde instructie die deze index nodig had.

Deze last_sql_handle kunnen worden gebruikt om de SQL-tekst van de query op te halen door de dynamische beheerfunctie sys.dm_exec_sql_text aan te roepen.
last_statement_start_offset int Geeft aan, in bytes, beginnend met 0, de startpositie van de query die de rij beschrijft binnen de tekst van zijn batch of persisted object voor de laatste gecompileerde instructie die deze index nodig had in zijn SQL-batch.
last_statement_end_offset int Geeft aan, in bytes, beginnend met 0, de eindpositie van de query die de rij beschrijft binnen de tekst van zijn batch of behouden object, voor de laatste gecompileerde instructie die deze index nodig had in zijn SQL-batch.
last_statement_sql_handle varbinary(64) Een token dat uniek de batch- of opgeslagen procedure identificeert van de laatst gecompileerde instructie die deze index nodig had. Gebruikt door Query Store. In tegenstelling tot last_sql_handle, sys.query_store_query_text verwijst naar de statement_sql_handle weergave die wordt gebruikt door de Query Store-catalogus sys.query_store_query_text.

Retourneert 0 als Query Store niet was ingeschakeld toen de query werd gecompileerd.
user_seeks bigint Aantal zoekopdrachten veroorzaakt door gebruikerszoekopdrachten waarvoor de aanbevolen index in de groep gebruikt had kunnen worden.
user_scans bigint Aantal scans veroorzaakt door gebruikerszoekopdrachten waarvoor de aanbevolen index in de groep gebruikt had kunnen worden.
last_user_seek datetime Datum en tijd van de laatste zoekopdracht veroorzaakt door gebruikerszoekopdrachten waarvoor de aanbevolen index in de groep gebruikt kon worden.
last_user_scan datetime Datum en tijd van de laatste scan veroorzaakt door gebruikerszoekopdrachten waarvoor de aanbevolen index in de groep gebruikt had kunnen worden.
avg_total_user_cost float Gemiddelde kosten van de gebruikersqueries die door de index in de groep kunnen worden verlaagd.
avg_user_impact float Gemiddeld procentueel voordeel dat gebruikerszoekopdrachten zouden kunnen ervaren als deze ontbrekende indexgroep werd geïmplementeerd. De waarde betekent dat de querykosten gemiddeld met dit percentage zouden dalen als deze ontbrekende indexgroep werd geïmplementeerd.
system_seeks bigint Aantal zoekopdrachten veroorzaakt door systeemzoekopdrachten, zoals autostatistieken, waarvoor de aanbevolen index in de groep gebruikt had kunnen worden. Voor meer informatie, zie Auto Stats Event Class.
system_scans bigint Aantal scans veroorzaakt door systeemzoekopdrachten waarvoor de aanbevolen index in de groep gebruikt had kunnen worden.
last_system_seek datetime Datum en tijd van de laatste systeemzoekopdracht veroorzaakt door systeemzoekopdrachten waarvoor de aanbevolen index in de groep gebruikt had kunnen worden.
last_system_scan datetime Datum en tijd van de laatste systeemscan veroorzaakt door systeemzoekopdrachten waarvoor de aanbevolen index in de groep gebruikt kon zijn.
avg_total_system_cost float Gemiddelde kosten van systeemqueries die door de index in de groep kunnen worden verlaagd.
avg_system_impact float Gemiddeld procentueel voordeel dat systeemzoekopdrachten kunnen ervaren als deze ontbrekende indexgroep wordt geïmplementeerd. De waarde betekent dat de querykosten gemiddeld met dit percentage zouden dalen als deze ontbrekende indexgroep werd geïmplementeerd.

Opmerkingen

De informatie die door sys.dm_db_missing_index_group_stats_query wordt teruggegeven, wordt bijgewerkt bij elke query-uitvoering, niet bij elke querycompilatie of hercompilatie. Gebruiksstatistieken worden niet bijgehouden en worden alleen bewaard totdat de database-engine opnieuw wordt opgestart.

Databasebeheerders moeten periodiek back-ups maken van de ontbrekende indexinformatie als ze de gebruiksstatistieken 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. Je kunt ook ontbrekende indexen behouden met Query Store.

Permissions

Om deze dynamische beheerweergave te bevragen, moeten gebruikers de VIEW SERVER STATE toestemming of een enkele toestemming die die VIEW SERVER STATE toestemming impliceert worden verleend, voor SQL Server 2019 (15.x) en eerdere versies.

Vereist toestemming VIEW SERVER PERFORMANCE STATE op de server, voor SQL Server 2022 (16.x) en latere versies.

Voorbeelden

De volgende voorbeelden illustreren hoe je de sys.dm_db_missing_index_group_stats_query dynamische beheerweergave kunt gebruiken.

Eén. Vind de nieuwste querytekst voor de top 10 hoogst verwachte verbeteringen voor gebruikerszoekopdrachten

De volgende zoekopdracht geeft de laatst opgenomen zoektekst terug voor de 10 ontbrekende indexen die de hoogst verwachte cumulatieve verbetering zouden opleveren, in aflopende volgorde.

SELECT TOP 10
    SUBSTRING
    (
            sql_text.text,
            misq.last_statement_start_offset / 2 + 1,
            (
            CASE misq.last_statement_start_offset
                WHEN -1 THEN DATALENGTH(sql_text.text)
                ELSE misq.last_statement_end_offset
            END - misq.last_statement_start_offset
            ) / 2 + 1
    ),
    misq.*
FROM sys.dm_db_missing_index_group_stats_query AS misq
CROSS APPLY sys.dm_exec_sql_text(misq.last_sql_handle) AS sql_text
ORDER BY misq.avg_total_user_cost
    * misq.avg_user_impact
    * (misq.user_seeks + misq.user_scans) DESC;