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