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
Nincsenek megjegyzések:
Megjegyzés küldése