2016. február 16., kedd

Hiányzó indexek lekérdezése MS SQL-ben

Az MS SQL Server 2005+ nyomon követi, hogy szerinte milyen indexek hiányoznak, amiket ki is lehet nyerni belőle. Az alábbi SQL utasítás különböző statisztikai adatokat listáz valamint le is generálja a szükséges CREATE scripteket.

SELECT
migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) AS improvement_measure,
mid.database_id,
DB_NAME(mid.database_id) AS database_name,
mid.[object_id],
'CREATE INDEX [missing_index_' 
+ CONVERT (varchar, mig.index_group_handle) + '_' 
+ CONVERT (varchar, mid.index_handle) + '_' 
+ LEFT (PARSENAME(mid.statement, 1), 32) + ']' 
+ ' 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.*
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

ORDER BY migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) DESC

Vannak hiányosságai is ennek a funkciónak:




  • nem veszi figyelembe az index létrehozási költségét
  • sosem ajánl partícionálást megoldásként
  • nem mond semmit az ideális sorrendről a több mezőt magába foglaló indexnél
Bővebb leírás és elemzés itt található.

Nincsenek megjegyzések:

Megjegyzés küldése