我可以合并2个非聚集索引吗(一列出现在idx_1的键列表中,并且出现在idx2的包含列表中)

时间:2019-04-26 05:05:23

标签: sql-server

我有一个非聚集索引(idx_1),其键列表中具有first_name,last_name,并且标记包括列表。另一个非聚集索引(idx_2),其first_name,last_name和key标记在键列表中,而include列表中没有列。我希望将这两个索引合并为一个索引。最佳解决方案是什么?

1 个答案:

答案 0 :(得分:1)

是的!您应该删除idx_1。但是,在此之前,分析索引使用情况并不是一个坏主意。检查每个索引上有多少次搜索和扫描。您可以使用此T-SQL查询。

SELECT OBJECT_NAME(IX.OBJECT_ID) Table_Name
       ,IX.name AS Index_Name
       ,IX.type_desc Index_Type
       ,SUM(PS.[used_page_count]) * 8 IndexSizeKB
       ,IXUS.user_seeks AS NumOfSeeks
       ,IXUS.user_scans AS NumOfScans
       ,IXUS.user_lookups AS NumOfLookups
       ,IXUS.user_updates AS NumOfUpdates
       ,IXUS.last_user_seek AS LastSeek
       ,IXUS.last_user_scan AS LastScan
       ,IXUS.last_user_lookup AS LastLookup
       ,IXUS.last_user_update AS LastUpdate
FROM sys.indexes IX
INNER JOIN sys.dm_db_index_usage_stats IXUS ON IXUS.index_id = IX.index_id AND IXUS.OBJECT_ID = IX.OBJECT_ID
INNER JOIN sys.dm_db_partition_stats PS on PS.object_id=IX.object_id
WHERE OBJECTPROPERTY(IX.OBJECT_ID,'IsUserTable') = 1
GROUP BY OBJECT_NAME(IX.OBJECT_ID) ,IX.name ,IX.type_desc ,IXUS.user_seeks ,IXUS.user_scans ,IXUS.user_lookups,IXUS.user_updates ,IXUS.last_user_seek ,IXUS.last_user_scan ,IXUS.last_user_lookup ,IXUS.last_user_update

除此之外,请查看以下链接sys.dm_db_index_usage_stats