Eksik Index’leri Tespit Etmek

14 Tem by NURULLAH ÇAKIR

Eksik Index’leri Tespit Etmek

Veritabanında özellikle yeni geliştirme aşamasında index’ler bizim için en önemli performans sağlayıcılarındandır. Eksik index’leri tespit etmeden önce index kavramını yakından tanımanız gerekir. “SQL Server’da Index Kavramı ve Performansa Etkisi” isimli makale size yardımcı olacaktır.

 

Aşağıdaki sorgu veritabanınızdaki eksik index’leri tespit etmek adına sizin için bir başlangıç olacaktır. Ama sorguda dönen tüm index oluşturma script’lerini çalıştırmanız doğru bir çözüm olmayacaktır. Sorgu Geliştirme Ölçüsü en fazla olan index oluşturma script’i en yukarda olacak şekilde sıralandı. Yani ilk kayıttan incelemeye başlamalısınız. Benim ortamımda ilk sorguya baktığımda 20 kolonlu bir tabloda 17 kolonu include olarak yerleştirmiş. Tabiki bu index’i oluşturmadım. Çünkü bu tabloyu yeniden oluşturmakla hemen hemen aynı anlama geliyor. Yukarda belirttiğim makalede hangi index’i oluşturup hangi index’i oluşturmayacağımızla ilgili detaylı bilgiler verdim.

SELECT
mid.statement AS Sorgu
  ,migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) AS [Geliştirme Ölçüsü],
  'CREATE INDEX [IX_'+LEFT (PARSENAME(mid.statement, 1), 32)+'_'
  +ISNULL(REPLACE(REPLACE(REPLACE(REPLACE(mid.equality_columns, '[',''),',','_'),']',''),' ',''),'')+
  +ISNULL('_'+REPLACE(REPLACE(REPLACE(REPLACE(mid.inequality_columns, '[',''),',','_'),']',''),' ',''),'')+']'
  + ' 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 [Index Create Script'i]
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 migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) > 10 and mid.database_id=DB_ID()
ORDER BY migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) DESC

Kullanılmayan index ve tabloları bulmak için de aşağıdaki makalelerden faydalanabilirsiniz.

Kullanılmayan Index’leri Tespit Etmek“,

Kullanılmayan Tabloları Tespit Etmek

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir