Mik*_*e Q 13 sql-server clustered-index
当一个表在SQL Server中具有聚簇索引时,是否意味着所有索引查询都将通过聚簇索引?
例如,如果我有一个包含单个非聚集索引的表(索引一列)并通过该列搜索行,它将执行 Index Seek -> RID -> Data row lookup -> Result
但是,如果我在不同的列上添加聚簇索引,则相同的查询将执行以下操作 Index Seek -> Extract clustering key -> Clustered index seek -> Results
这对我来说意味着非聚集索引不再"终止"叶子上的RID,而是使用聚簇索引的聚类键?是对的吗?
mar*_*c_s 13
是的,你得到了很多想法.
如果您有聚簇索引,那么任何非聚集索引也将包括聚簇索引中的列作为它们"查找"到实际数据中的列.
如果在非聚集索引中搜索值,并且需要访问基础数据的其余列,则SQL Server会从该非聚簇索引执行"书签查找"(或"键查找")聚簇索引(在叶级节点中包含数据本身).使用聚簇索引,您不再需要RID了 - 因此,如果RID发生更改(数据从一个页面移动到另一个页面),则不必更新所有索引页面.
书签查找是相当昂贵的操作,因此您可以通过INCLUDE语句向非聚集索引添加其他列.这样,您的非聚集索引将在其叶级页面上包含这些附加列,如果您只需要包含在该组数据中的列,则可以从非聚簇索引本身满足您的查询(在例如,它被称为"覆盖索引"),您可以自己保存一系列书签查找.
| 归档时间: |
|
| 查看次数: |
3447 次 |
| 最近记录: |