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