Udostępnij za pomocą


sys.dm_db_missing_index_details (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

Zwraca szczegółowe informacje o brakujących indeksach.

W usłudze Azure SQL Database dynamiczne widoki zarządzania nie mogą ujawniać informacji, które mają wpływ na zawieranie bazy danych lub uwidacznianie informacji o innych bazach danych, do których użytkownik ma dostęp. Aby uniknąć ujawniania tych informacji, każdy wiersz zawierający dane, które nie należą do połączonej dzierżawy, jest filtrowany.

Nazwa kolumny Typ danych Description
index_handle int Identyfikuje konkretny brakujący indeks. Identyfikator jest unikalny na całym serwerze. index_handle jest kluczem tego stołu.
database_id smallint Identyfikuje bazę danych, w której znajduje się tabela z brakującym indeksem.

W usłudze Azure SQL Database wartości są unikatowe w ramach pojedynczej bazy danych lub elastycznej puli, ale nie w obrębie serwera logicznego.
object_id int Identyfikuje tabelę, w której indeks jest nieobecny.
equality_columns nvarchar(4000) Lista kolumn oddzielonych przecinkami, które przyczyniają się do predykatów równości w postaci:

table.column = constant_value
inequality_columns nvarchar(4000) Lista kolumn oddzielonych przecinkami, które przyczyniają się do nierówności, na przykład predykatów o postaci:

table.column>constant_value

Każdy operator porównania inny niż "=" wyraża nierówność.
included_columns nvarchar(4000) Lista kolumn oddzielonych przecinkami potrzebna jako kolumny pokrywające zapytanie. Więcej informacji o kolumnach pokrywających lub dołączonych można znaleźć w artykule Utwórz indeksy z uwzględnionymi kolumnami.

Dla indeksów zoptymalizowanych pod pamięć (zarówno hash, jak i nieklastrowanych) ignoruj included_columns. Wszystkie kolumny tabeli są uwzględnione w każdym indeksie zoptymalizowanym pod pamięć.
wypowiedź nvarchar(4000) Nazwa tabeli, w której indeks jest nieobecny.

Uwagi

Informacje zwracane przez sys.dm_db_missing_index_details są aktualizowane, gdy zapytanie jest optymalizowane przez optymalizator zapytań i nie są utrwalane. Brakujące informacje indeksowe są przechowywane tylko do momentu ponownego uruchomienia silnika bazy danych. Administratorzy baz danych powinni okresowo tworzyć kopie zapasowe brakujących informacji indeksowych, jeśli chcą je zachować po recyklingu serwera. Użyj kolumny sqlserver_start_time w sys.dm_os_sys_info , aby znaleźć ostatni czas uruchamiania aparatu bazy danych.

Aby określić, do której grupy brakujących indeksów należy dany brakujący indeks, możesz zapytać dynamiczny sys.dm_db_missing_index_groups widok zarządzania, łącząc go z na sys.dm_db_missing_index_details podstawie kolumny index_handle .

Uwaga / Notatka

Zestaw wyników dla tego DMV jest ograniczony do 600 wierszy. Każdy wiersz zawiera jeden brakujący indeks. Jeśli brakuje Ci ponad 600 indeksów, powinieneś zająć się istniejącymi brakującymi indeksami, aby potem zobaczyć nowsze.

Wykorzystanie brakujących informacji indeksowych w instrukcjach CREATE INDEX

Aby przekształcić informacje zwracane przez na sys.dm_db_missing_index_details polecenie CREATE INDEX zarówno dla indeksów zoptymalizowanych pod pamięć, jak i dysków, kolumny równości powinny być umieszczone przed kolumnami nierówności, a razem powinny stanowić klucz indeksu. Kolumny zawarte powinny być dodawane do instrukcji CREATE INDEX za pomocą klauzuli INCLUDE. Aby określić efektywną kolejność kolumn równości, należy je uporządkować na podstawie ich wyboru: najpierw wyświetl najbardziej selektywne kolumny (po lewej stronie na liście kolumn). Dowiedz się więcej w Tunuj indeksy nieklastrowane z brakującymi sugestiami indeksów, w tym Ograniczenia funkcji brakującej indeksu.

Więcej informacji o indeksach zoptymalizowanych pod pamięć można znaleźć w sekcji Indeksy dla Memory-Optimized Tabel.

Spójność transakcji

Jeśli transakcja tworzy lub upuszcza tabelę, wiersze zawierające brakujące informacje indeksowe o upuszczonych obiektach są usuwane z tego dynamicznego obiektu zarządzania, zachowując spójność transakcji. Dowiedz się więcej o ograniczeniach brakującej funkcji indeksu.

Permissions

W programie SQL Server i usłudze SQL Managed Instance wymagane jest VIEW SERVER STATE uprawnienie.

W przypadku celów usługi SQL Database Basic, S0 i S1 oraz baz danych w elastycznych pulach wymagane jest konto administratora serwera , konto administratora firmy Microsoft Entra lub członkostwo w ##MS_ServerStateReader##roli serwera . We wszystkich innych celach usługi SQL Database wymagane VIEW DATABASE STATE jest uprawnienie do bazy danych lub członkostwo w ##MS_ServerStateReader## roli serwera.

Uprawnienia dla programu SQL Server 2022 i nowszych

Wymaga uprawnienia WYŚWIETL STAN WYDAJNOŚCI SERWERA na serwerze.

Przykłady

Poniższy przykład zwraca brakujące sugestie indeksów dla aktualnej bazy danych. Brakujące sugestie indeksów powinny być łączone, jeśli to możliwe, ze sobą oraz z istniejącymi indeksami w aktualnej bazie danych. Dowiedz się, jak stosować te sugestie w sposób dostrojony, nieklastrowany indeks z brakującymi sugestiami indeksowymi.

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

Uwaga / Notatka

Skrypt tworzenia indeksu w Tiger Toolbox Microsoftu sprawdza brakujące DMVs indeksów i automatycznie usuwa wszelkie nadmiarowe sugerowane indeksy, wyklucza indeksy o niskim wpływie i generuje skrypty tworzenia indeksów do przeglądu. Podobnie jak w powyższym zapytaniu, NIE wykonuje poleceń tworzenia indeksów. Skrypt tworzenia indeksu jest odpowiedni dla programu SQL Server i usługi Azure SQL Managed Instance. W przypadku usługi Azure SQL Database rozważ zaimplementowanie automatycznego dostrajania indeksów.

Dalsze kroki

Dowiedz się więcej o brakującej funkcji indeksu w następujących artykułach: