首页 > 解决方案 > 我可以合并 2 个非聚集索引(一列出现在 idx_1 的键列表中,并出现在 idx2 的包含列表中)

问题描述

我有一个非聚集索引(idx_1),键列表中有名字、姓氏和标记包括列表。另一个非聚集索引 (idx_2),在键列表中具有 first_name、last_name 和标记,并且在包含列表中没有列。我希望将这两个索引组合成一个索引。什么是最佳解决方案?

标签: sql-server

解决方案


是的!您应该删除 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


推荐阅读