我们的网站受到了很大的冲击,所以我们正在考虑优化一些现有的查询。
在研究这一点时,我们遇到了几个查询,当查询中有聚集索引的简单引用时,它们的执行计划大约快4-5倍……例如
如果这是旧查询:
SELECT ...
FROM myTable
WHERE categoryID = @category 根据SSMS中的执行计划,以下查询速度将提高4倍:
SELECT ...
FROM myTable
WHERE categoryID = @category
AND lotID = lotID我们似乎无法理解这将如何使查询速度更快。聚集索引在lotID上,但是由于它在与自身进行比较,这有什么帮助呢?
发布于 2009-06-16 18:43:18
对我来说似乎很明显
第一个查询没有被聚集索引覆盖,而第二个查询是因为lotID不在第一个查询的WHERE子句中
您可能希望阅读SQL Server covering indexes以了解所有这些内容是如何工作的
您还需要了解聚集索引就是数据,表的所有数据都在聚集索引中。当您在具有聚集索引的表上创建非聚集索引时,非聚集索引将具有指向聚集索引的指针(因为这是其余数据所在的位置),除非您可以通过非聚集索引完全满足查询,在这种情况下将只使用非聚集索引...我现在停止漫谈
编辑
我读了,lotID = @lotID不是,lotID = lotID
有时,您可以通过执行where lotID >0 (选择您拥有的最小数字)来伪造聚集索引,这样就会得到一个seek
因此,如果你的最小lotID =1,并且lotID >0
你也可以看到搜索而不是扫描,我在这篇文章Is an index seek always better or faster than an index scan?中演示了IndexValue > '‘的位置
https://stackoverflow.com/questions/1003230
复制相似问题