我發現下面的SQL旨在幫助識別缺失的索引。我想更好地理解輸出。DMV找到缺失的索引
SELECT migs.avg_total_user_cost * (migs.avg_user_impact/100.0) * (migs.user_seeks + migs.user_scans) AS ExpectedImprovement
, DB_NAME(mid.database_id) AS DBName
, mid.[object_id] AS ObjectID
, mid.statement AS FullyQualifiedObjectName
, 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, '') AS IndexColumns
, ISNULL (mid.included_columns, '') AS IncludeColumns
, migs.user_seeks
, migs.user_scans
, migs.last_user_seek
, migs.last_user_scan
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
其中一個返回的列是「包含列」。
我想知道這是否意味着所提到的列名應該被添加到索引中的列表中,或者是否有其他功能可以返回那些可能的高訪問列值而不會將它們添加到索引本身。 (也許我想到聽到這樣的功能,或者它可能是另一個供應商的數據庫)
是輸出只是建議索引中列的列表由「包含列」返回值中提到的列擴展?我對輸出做出了反應,表明我爲索引添加了15個字段,這對我來說似乎可能過度。
可以使用SQL Server 2008 R2 SSRMS GUI來指定INCLUDED字段,然後生成腳本?我在GUI中看不到這個選項。檢查生成的SQL是我通常如何學習語法的。 – ChadD