【发布时间】:2011-09-08 16:51:58
【问题描述】:
我在 SQL Server 中创建了一个简单的表:
MemberId INT PRIMARY KEY Identity
Name NVARCHAR(100) NULL
Description NVARCHAR(250) NULL
当我创建 MemberId 作为主键时,唯一添加的索引是聚集索引。我没有为名称或描述添加索引。
我向表中添加了大约 30,000 行测试数据并进行了以下查询:
SELECT * FROM Members WHERE Name = 'Foo'
执行计划如下:
Clustered Index Scan - cost 100%
这是如何进行聚集索引扫描的?我不是在预测聚集索引。我认为这更像是表扫描。谁可以给我解释一下这个?如果不这样做,究竟会导致表扫描?
【问题讨论】:
-
如果按名称搜索将成为一个常见要求,您应该尝试在该列上创建一个具有非聚集索引的相同表,用相同的 30,000 行填充它,然后运行查询对照每张桌子,并比较这些计划。您应该会看到一个非聚集索引搜索,并且它应该更有效(至少对于这个查询)。
标签: sql-server sql-execution-plan