试图了解sql执行计划

时间:2011-09-08 16:51:59

标签: sql-server sql-execution-plan

我在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%

这是一个聚簇索引如何扫描?我不是在预测聚簇索引。我认为这更像是一次桌面扫描。谁可以给我解释一下这个?如果没有,究竟会导致表扫描的原因是什么?

2 个答案:

答案 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?