Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
Eksik indekslerle ilgili ayrıntılı bilgiler getirir.
Azure SQL Veritabanı'nda dinamik yönetim görünümleri, veritabanının kapsamasını etkileyecek bilgileri veya kullanıcının erişimi olan diğer veritabanları hakkındaki bilgileri kullanıma sunmaz. Bu bilgilerin açığa çıkmasını önlemek için, bağlı kiracıya ait olmayan verileri içeren her satır filtrelenir.
| Sütun adı | Veri türü | Description |
|---|---|---|
| index_handle | int | Belirli bir eksik indeks tespit eder. Tanımlayıcı sunucu genelinde benzersizdir.
index_handle bu masanın anahtarıdır. |
| database_id | smallint | Eksik indeksin bulunduğu tablonun bulunduğu veritabanını belirler. Azure SQL Veritabanı'nda değerler tek bir veritabanı veya elastik havuz içinde benzersizdir, ancak mantıksal sunucu içinde değildir. |
| object_id | int | İndeksin eksik olduğu tabloyu belirler. |
| equality_columns | nvarchar(4000) | Eşitlik öncüllerine katkıda bulunan sütunların virgülle ayrılmış listesi: table.column = constant_value |
| inequality_columns | nvarchar(4000) | Eşitsizlik öncüllerine katkıda bulunan sütunların virgülle ayrılmış listesi, örneğin, şu biçimdeki önlemler: table.column>constant_value "=" dışındaki herhangi bir karşılaştırma operatörü eşitsizliği ifade eder. |
| included_columns | nvarchar(4000) | Sorgu için örtücü sütunlar için gereken sütunların virgülle ayrılmış listesi. Kapak veya dahil edilen sütunlar hakkında daha fazla bilgi için Dahil Sütunlarla İndeksler Oluştur bölümüne bakınız. Bellek optimize edilmiş indeksler (hem hash hem de bellek optimize edilmiş kümelenmemiş) için included_columns. Tablonun tüm sütunları, her bellek için optimize edilmiş indekste yer alır. |
| beyanat | nvarchar(4000) | İndeksin eksik olduğu tablonun adı. |
Açıklamalar
Geri sys.dm_db_missing_index_details dönen bilgiler, bir sorgu sorgu optimizörü tarafından optimize edildiğinde güncellenir ve kalıcı olmaz. Eksik indeks bilgisi yalnızca veritabanı motoru yeniden başlatılana kadar saklanır. Veritabanı yöneticileri, eksik indeks bilgilerini sunucu geri dönüşümünden sonra korumak istiyorlarsa periyodik olarak yedek kopyalarını almalıdır.
sqlserver_start_time Son veritabanı altyapısı başlangıç zamanını bulmak için sys.dm_os_sys_info sütununu kullanın.
Eksik bir indeksin hangi eksik indeks gruplarına ait olduğunu belirlemek için, sys.dm_db_missing_index_groups dinamik yönetim görünümünü sütuna göre eşdeğer sys.dm_db_missing_index_detailsindex_handle olarak sorgulayabilirsiniz.
Uyarı
Bu DMV için sonuç seti 600 satırla sınırlıdır. Her satırda eksik bir indeks bulunur. 600'den fazla eksik indeksiniz varsa, mevcut eksik indeksleri ele almalısınız ki daha yeni olanlara bakabilesiniz.
CREATE INDEX ifadelerinde eksik indeks bilgisi kullanımı
Geri sys.dm_db_missing_index_details dönen bilgiyi hem bellek optimize edilmiş hem de disk tabanlı indeksler için CREATE INDEX ifadesine dönüştürmek için, eşitlik sütunları eşitsizlik sütunlarının önüne yerleştirilmeli ve birlikte indeksin anahtarını oluşturmalıdır. Dahil edilen sütunlar, CREATE INDEX ifadesine INCLUDE maddesi kullanılarak eklenmelidir. Eşitlik sütunlarının etkili bir sırasını belirlemek için, bunları seçiciliklerine göre sırala: önce en seçmeli sütunları listeleyin (sütun listesinde en soldaki).
Tune'da eksik indeks önerileri içeren kümelenmemiş indeksler, eksik indeks özelliğinin sınırlamaları dahil olmak üzere daha fazla bilgi edinin.
Bellek optimize edilmiş indeksler hakkında daha fazla bilgi için bkz. Memory-Optimized Tablolar İçin İndeksler.
İşlem tutarlılığı
Bir işlem bir tablo oluşturuyor veya düşürürse, düşürülen nesnelere dair eksik indeks bilgisini içeren satırlar bu dinamik yönetim nesnesinden çıkarılır ve işlem tutarlılığı korunur. Eksik indeks özelliğinin sınırlamaları hakkında daha fazla bilgi edinin.
Permissions
SQL Server ve SQL Yönetilen Örneği'ne VIEW SERVER STATE izni gerekir.
SQL Veritabanı Temel,S0 ve S1 hizmet hedeflerinive elastik havuzlardaki veritabanları için, sunucu yöneticisi hesabı, Microsoft Entra yönetici hesabı veya ##MS_ServerStateReader##sunucu rolü üyeliği gereklidir. Diğer tüm SQL Veritabanı hizmet hedeflerinde, veritabanında VIEW DATABASE STATE izni veya ##MS_ServerStateReader## sunucu rolü üyeliği gereklidir.
SQL Server 2022 ve üzeri için izinler
Sunucuda SUNUCU PERFORMANS DURUMUNU GÖRÜNTÜLE izni gerektirir.
Örnekler
Aşağıdaki örnek, mevcut veritabanı için eksik indeks önerilerini geri getirir. Eksik indeks önerileri mümkün olduğunda birbirleriyle ve mevcut veritabanındaki mevcut indekslerle birleştirilmelidir. Bu önerileri, eksik indeks önerileriyle kümelenmiş olmayan indeksleri uyumlu şekilde nasıl uygulayacağınızı öğrenin.
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
Uyarı
Microsoft'un Tiger Toolbox'ındaDizin Oluşturma betiği eksik dizin DMV'lerini inceler ve önerilen gereksiz dizinleri otomatik olarak kaldırır, düşük etkili dizinleri ayrıştırıyor ve gözden geçirmeniz için dizin oluşturma betikleri oluşturuyor. Yukarıdaki sorguda olduğu gibi, indeks oluşturma komutlarını YÜRÜTMEZ. Dizin Yaratma betiği SQL Server ve Azure SQL Yönetilen Örnek için optimize edilmiştir. Azure SQL Veritabanı için otomatik dizin ayarlamayı uygulamayı göz önünde bulundurun.
Sonraki Adımlar
Eksik indeks özelliği hakkında daha fazla bilgiyi aşağıdaki makalelerde bulabilirsiniz:
- Kümelenmemiş dizinleri eksik indeks önerileri kullanarak iyileştirin
- 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)