我在SQL Server中创建了一个简单的表:
MemberId INT PRIMARY KEY Identity
Name NVARCHAR(100) NULL
Description NVARCHAR(250) NULL
当我将MemberId创建为主键时,添加的唯一索引是聚簇索引。我没有为Name或Description添加索引。
我向表中添加了大约30,000行测试数据并执行了以下查询:
SELECT * FROM Members WHERE Name = 'Foo'
执行计划如下:
Clustered Index Scan - cost 100%
这是一个聚簇索引如何扫描?我不是在预测聚簇索引。我认为这更像是一次桌面扫描。谁可以给我解释一下这个?如果没有,究竟会导致表扫描的原因是什么?
答案 0 :(得分:5)
如果表具有聚簇索引,则clustered index scan
与全表扫描相同。聚簇索引本身包含所有数据。
答案 1 :(得分:1)
如果您使用此
更改主键声明 MemberId INT PRIMARY KEY NONCLUSTERED IDENTITY
在没有聚集索引之前,您会找到表扫描。创建聚簇索引后,表结构将发生更改,并由聚簇索引键进行物理排序。我认为表扫描并不意味着在那之后并用聚集索引扫描代替。每当找不到有用的索引来覆盖查询时
在另一个单词表扫描中只有在表数据没有聚类并存储为heap structure时才有意义
What's the difference between a Table Scan and a Clustered Index Scan?