gpt4 book ai didi

sql - 为什么在计算表中的所有行时会出现非聚集索引扫描?

转载 作者:行者123 更新时间:2023-12-04 13:23:32 24 4
gpt4 key购买 nike

据我了解,每个事务都会看到自己的数据库版本,因此系统无法从某个计数器获取总行数,因此需要扫描索引。但我认为它是主键上的聚集索引,而不是附加索引。如果我有多个额外的索引,无论如何会选择哪一个?

在深入研究此事时,我注意到另一件奇怪的事情。假设有两个相同的表,Articles 和 Articles2,每个表都有三列:Id、View_Count 和 Title。第一个只有一个基于 PK 的聚集索引,而第二个在 view_count 上有一个额外的非聚集、非唯一索引。查询SELECT COUNT(1) FROM Articles对于具有附加索引的表,运行速度提高了 2 倍。

最佳答案

SQL Server 将优化您的查询 - 如果它需要计算表中的行数,它将选择尽可能小的数据集来执行此操作。

所以如果你考虑你的聚集索引——它包含实际的数据页——每行可能有几千个字节。加载所有这些字节只是为了计算行数是浪费的——即使只是在磁盘 I/O 方面也是如此。

因此,如果有一个未以任何方式过滤或限制的非聚集索引,SQL Server 将选择该数据结构进行计数 - 因为非聚集索引基本上包含您放入 NC 索引中的列(加上聚集索引键) - 加载的数据要少得多,只是为了计算行数。

关于sql - 为什么在计算表中的所有行时会出现非聚集索引扫描?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9596567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com