我在“Persons”表中的“last_name”列上创建了一个非聚集索引
Select * From Persons
Where last_name = 'Hogg'
那么为什么索引不能同时返回所有列,而是进行 RID 查找呢?索引如何在这里工作?
我在“Persons”表中的“last_name”列上创建了一个非聚集索引
Select * From Persons
Where last_name = 'Hogg'
那么为什么索引不能同时返回所有列,而是进行 RID 查找呢?索引如何在这里工作?
索引仅涵盖该列last_name
,并且仅包含有关该列的数据。您可以在概念上将您描述为一系列对的索引:(last_name,row)
,其中row
是对实际表中特定行的引用。索引存储按 排序的对last_name
,但不存储有关表的其他信息。
您的查询请求Persons
. 索引用于定位“Hogg”所在的行last_name
,但数据库必须引用该表来检索附加列。
您似乎想要的是感兴趣列的覆盖索引。术语“RID 查找”暗示 SQL Server。也许问题是什么是 SQL Server 中的覆盖索引和覆盖查询?以及它指向的页面:使用覆盖索引来提高查询性能会有所帮助。