我在表“Persons”
中的“last_name”列上创建了一个非聚集索引Select * From Persons
Where last_name = 'Hogg'
那么为什么索引无法同时返回所有列而是进行RID查找? 索引如何在这里工作?
答案 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 会有所帮助。