为什么我们在SQL中获得RID查找?

时间:2013-11-11 01:01:41

标签: sql sql-server indexing

我在表“Persons”

中的“last_name”列上创建了一个非聚集索引
Select * From Persons
Where last_name = 'Hogg'

那么为什么索引无法同时返回所有列而是进行RID查找? 索引如何在这里工作?

1 个答案:

答案 0 :(得分:1)

索引仅涵盖列last_name,仅包含有关该列的数据。您可以在概念上考虑您已描述为一系列对的索引:(last_name,row),其中row是对实际表中特定行的引用。索引存储按last_name排序的对,但不存储有关该表的其他信息。

您的查询会请求Persons的所有列。索引用于定位last_name为“Hogg”的行,但数据库必须引用该表以检索其他列。

您想要的是感兴趣的列的覆盖索引。术语“RID查找”表示SQL Server。也许问题What are Covering Indexes and Covered Queries in SQL Server?及其指向的页面:Using Covering Indexes to Improve Query Performance 会有所帮助。