我们的网站变得非常困难,所以我们正在考虑优化一些现有的查询. 在研究这个时,我们遇到了几个查询,当查询中有一个简单的聚集索引引用时,执行计划的速度提高了4-5倍…例如 如果这是
在研究这个时,我们遇到了几个查询,当查询中有一个简单的聚集索引引用时,执行计划的速度提高了4-5倍…例如
如果这是旧查询:
SELECT ... FROM myTable WHERE categoryID = @category
根据SSMS中的执行计划,以下查询将快4倍:
SELECT ... FROM myTable WHERE categoryID = @category AND lotID = lotID
我们似乎无法理解这将如何使查询更快.聚集索引在lotID上,但由于它与自身进行比较,这有什么帮助?
对我来说似乎很明显第一个查询不包含在聚簇索引中,而第二个查询则不在第一个查询的WHERE子句中
您可能需要阅读SQL Server covering indexes以了解这一切是如何工作的
您还需要了解聚簇索引是数据,表的所有数据都在聚簇索引中.当您在具有聚簇索引的表上创建非聚集索引时,非聚簇索引将具有指向聚簇索引的指针(因为这是其余数据所在的位置),除非您可以完全满足非聚簇的查询索引,在这种情况下,只会使用非聚集索引……我现在将停止漫游
编辑
我读了AND lotID = @lotID
NOT和lotID = lotID
有时你可以通过执行lotID> 0(选择你拥有的最低数字)来伪造聚集索引,然后你会得到一个搜索
因此,如果您的最小lotID = 1并且您添加了
AND lotID> 0
您还可以看到搜索而不是扫描,我演示了WHERE IndexValue> ”在这篇文章Is an index seek always better or faster than an index scan?中