Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz 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 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:
- 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)