1

我在“Persons”表中的“last_name”列上创建了一个非聚集索引

Select * From Persons
Where last_name = 'Hogg'

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

4

1 回答 1

1

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

您的查询请求Persons. 索引用于定位“Hogg”所在的行last_name,但数据库必须引用该表来检索附加列。

您似乎想要的是感兴趣列的覆盖索引。术语“RID 查找”暗示 SQL Server。也许问题是什么是 SQL Server 中的覆盖索引和覆盖查询?以及它指向的页面:使用覆盖索引来提高查询性能会有所帮助。

于 2013-11-11T01:04:18.467 回答