我认为我对 SQL Server 2005 中的索引(可能还有所有索引??)的理解是有缺陷的,请教育我。
我们有一个表,说 5 列:
Id | ProductId | OrderId | PriceId | Approved | Price
---------------------------------------------------------
1 | 2545 | 32345 | 224 | 1 | 150.00
该表有 3000 万行(如果重要的话,实际表中实际上大约有 30 列)。
这些Id
列都是UniqueIdentifer
,所以围绕如果其中一个是一个大字段,它可能不是多余的事实的帖子似乎并不相关。
如果我在列上添加索引ProductID
。
CREATE INDEX "ProductIndex" ON "dummy_table" (
"ProductId"
)
ProductId
然后在AND OrderId
AND上添加另一个索引PriceId
CREATE INDEX "ProductAndOrderIndex" ON "dummy_table" (
"ProductId",
"OrderId",
"PriceId"
)
第一个索引是多余的吗,即 SQL Server 计划程序应该恢复使用第二个索引并且性能也一样好?
之所以出现这个问题,是因为删除第一个索引会导致性能大幅下降(一个进程的 10 秒已变为 2 分半钟)。我已经把它缩小到那个特定的索引,所以接下来就是跟踪所有的 SQL,但这将是一项大任务,除非我必须这样做,否则我不想做。