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

Bir cevap yazın

Your email address will not be published. Required fields are marked *.

*
*

Lütfen captcha kodunu giriniz *

Lütfen Resimdeki Kodu Boşluğa Giriniz.
You may use these <abbr title="HyperText Markup Language">HTML</abbr> tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Lütfen captcha kodunu giriniz *

Lütfen Resimdeki Kodu Boşluğa Giriniz.