【发布时间】:2017-12-25 01:07:46
【问题描述】:
表扫描究竟是如何工作的?
这是我所知道的:
- 表扫描搜索整个表。
- 聚集索引扫描只搜索在该索引上定义的任何列。
假设我们有这种情况:
table_a
列:ID、城市、国家
我在City 上有一个聚集索引。
我运行的查询是这样的:
select city
from table_a
where city = 'austin'
实际问题:
在这种情况下,表扫描将只查看
city列还是检查 ID、城市和国家/地区列。如果表扫描只搜索一列,是否可以说表扫描和索引扫描具有相同的性能?
编辑第 1 部分:
谷歌搜索写道:
当发生表扫描时,SQL Server 将所有行和列读入内存。发生索引扫描时,它将读取索引中的所有行,并且只读取列。
【问题讨论】:
-
"聚集索引扫描只搜索在该索引上定义的任何列。" - 这是不正确的。聚集索引扫描是表扫描:它访问表中的每一页,因为在 SQL Server 中,(单个)聚集索引是表。即使它只检查查询所需的列,它仍然会读取每一页。
-
同一个东西为什么会有不同的名字呢?它们只是在某些情况下是一样的吗?
-
“如果它们是同一个东西,为什么它们有不同的名字?” - 也许问微软!最初,术语表扫描用于涵盖堆和聚簇表。后来条款被拆分(AFAIK)。但是,聚集索引扫描 == 表扫描。
-
不,我不是想成为一个混蛋,只是想确保我理解正确。
-
聚集索引的索引扫描是表扫描!因为唯一的聚集索引就是表。
标签: sql-server indexing