我有 2 个具有相同键的索引,但其中一个也有 INCLUDE 列。我可以放弃哪一个?
它们是相同的,除了IndexInclude有 6 个 INCLUDE 列。
两者都有一些读取(IndexNoInclude 具有更高的搜索)。
我相信IndexInclude会满足任何使用IndexNoInclude的要求,对吗?因为钥匙完全一样。
感谢您提前提供的所有帮助。
sp_Blitz 的输出。抱歉格式错误
详细信息:db_schema.table.index(indexid) 定义:[属性] ColumnName {datatype maxbytes} Secret Columns Fillfactor Usage Stats Op Stats Size IndexINCLUDE [1 KEY] EXECUTION_TIME {datetime 8} [6 INCLUDES] 读取:101,913(101,913 查找)写入:2,381,661,369 0 单例查找;225 次扫描/寻道;0 次删除;0 次更新;263,358,683 行;5.4GB IndexNoInclude [1 KEY] EXECUTION_TIME {datetime 8} 读取:1,181,595(1,181,595 查找)写入:2,380,483,678 0 单例查找;15 次扫描/寻道;0 次删除;0 次更新;263,358,683 行;2.9GB
它们相同吗?也许我误读了输出,但看起来IndexNoInclude 确实有一个额外的键列:
[ID] NUMERIC
。您应该查看您的查询以查看
INCLUDE
实际引用/使用了 6 列中的哪一列。您可能会通过“合并”这两个索引而逃脱,这样剩余的索引就具有两个键列和 1 到 6 个INCLUDE
列。在使用IndexInclude查看查询计划后,我确认他们并没有真正使用 6 个包含的列(主要是 SELECT),所以我禁用了IndexInclude。
到目前为止一切顺利,而我继续监视
这些是我用来查找它们的查询(来自 SQLSkills 和 Kendra) https://www.sqlskills.com/blogs/jonathan/finding-what-queries-in-the-plan-cache-use-a-specific-索引/ https://littlekendra.com/2017/01/24/how-to-find-queries-using-an-index-and-queries-using-index-hints/
我将两者结合起来并进行了修改以获得我需要的东西(查看实际文本/查询、执行计数、读/写、上次执行时间)