为什么执行计划中没有显示RID(书签)查找?

时间:2014-08-19 17:26:02

标签: sql-server lookup non-clustered-index

我试图通过创建堆表来检查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查找:

enter image description here

我正在使用SQL Server 2008R2(版本10.50.4000.0)Service Pack 2.

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

1 个答案:

答案 0 :(得分:4)

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

由于它根本没有触及索引,因此SQL Server不需要RID查找就可以从索引转到堆。

原因可能是SQL Server估计一个客户可能有超过+/- 100行。优化器将尝试避免大量查找。

您可以使用(CustomerID)上的索引再次尝试,或者在AddresID子句中添加where