Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w Microsoft Fabric
Zwraca szczegółowe informacje o brakujących indeksach.
W Azure SQL Database dynamiczne widoki zarządzania nie mogą ujawniać informacji, które mogłyby wpłynąć na zawartość bazy danych ani ujawnić 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źć czas ostatniego uruchomienia silnika 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 .
Note
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 CREATE INDEX instrukcjach
Aby przekształcić informacje zwracane przez na sys.dm_db_missing_index_detailsCREATE INDEX instrukcje zarówno dla indeksów zoptymalizowanych pod pamięć, jak i dysku, kolumny równości powinny być umieszczone przed kolumnami nierówności, a razem powinny stanowić klucz indeksu. Kolumny zawarte powinny być dodawane do oświadczenia 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 uprawnienia.
W usłudze SQL Database VIEW DATABASE STATE w bazie danych lub członkostwo w roli serwera ##MS_ServerStateReader##.
Uprawnienia dla programu SQL Server 2022 i nowszych
Wymaga VIEW uprawnień STAN WYDAJNOŚCI SERWERA na serwerze.
Examples
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
Note
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.
Treści powiązane
- Dostrajanie indeksów nieklastrowanych za pomocą sugestii brakujących indeksów
- 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)