我正在回顾性能调整研究和 AdventureWorks2012 练习。
我从 Product 表中构建了 4 个副本,然后使用以下索引进行设置。
--tmpProduct1 nothing
CREATE CLUSTERED INDEX cIdx ON tmpProduct2 (ProductID ASC)
CREATE NONCLUSTERED INDEX ncIdx ON tmpProduct3 (ProductID ASC)
CREATE NONCLUSTERED INDEX ncIdx ON tmpProduct4 (ProductID ASC) INCLUDE (Name, ProductNumber)
然后我使用以下查询执行执行计划。
SELECT ProductID FROM tmpProduct1
SELECT ProductID FROM tmpProduct2
SELECT ProductID FROM tmpProduct3
SELECT ProductID FROM tmpProduct4
我预计它们四个的性能应该相同,因为它们都需要扫描。另外,我只选择ProductID
列并且没有WHERE
条件。
然而,事实证明是
为什么聚集索引比非聚集索引贵?
为什么非聚集索引在这种情况下会降低成本?
为什么列存储使 query4 的成本高于 query3?