2

我试图通过创建一个堆表来检查 RID(以前的书签)查找:

CREATE TABLE [dbo].[CustomerAddress] 
( 
[CustomerID] [int], 
[AddressID] [int], 
[ModifiedDate] [datetime] 
); 
GO 
CREATE NONCLUSTERED INDEX x 
ON dbo.CustomerAddress(CustomerID, AddressID); 

然后,我尝试了以下查询来调查执行计划:

SELECT CustomerID, AddressID, ModifiedDate 
FROM dbo.CustomerAddress 
WHERE CustomerID = 29485;

但是,使用 MSSMS 我在执行计划中看不到 RID 查找:

在此处输入图像描述

我正在使用 SQL Server 2008R2(版本 10.50.4000.0)服务包 2。

PS:这个问题是基于 Aaron Bertrand 的文章

4

1 回答 1

4

表扫描意味着 SQL Server 不使用您的索引。它从“堆”中读取。“堆”是没有聚集索引的表的数据存储。

因为它根本不接触索引,所以 SQL Server 不需要 RID 查找来从索引到堆。

原因可能是 SQL Server 估计一位客户的行数可能超过 +/- 100 行。优化器会尽量避免大量的查找。

您可以在 just 上使用索引再试一次,或者在子句中(CustomerID)添加 an 。AddresIDwhere

于 2014-08-19T17:36:07.900 回答