首页 > 解决方案 > 主键(ID)上的索引扫描

问题描述

询问

SELECT MAX(ID) FROM Product

https://www.brentozar.com/pastetheplan/?id=Skv5OqZBU

即使查询基于主键(ID),为什么优化器使用索引扫描?

标签: sql-serverquery-optimization

解决方案


如果您阅读计划的“索引扫描”节点内的详细信息,您会发现它只期望返回 1 行。从末尾开始扫描 1 行实际上比索引查找具有更好的性能。

MSSQL 索引的物理结构是 B+ 树。通过索引查找,这意味着您从树部分开始在 O(log N) 中定位项目。通过索引扫描,这意味着您从数据部分开始定位项目。这次你读了一个,所以它是 O(1)。

因此,您的查询实际上现在执行得非常快。


推荐阅读