MSSQL索引优化之移除键查找(书签查找)或RID查找

0    71    1

Tags:

👉 本文共约2490个字,系统预计阅读时间或需10分钟。

简介

从SQL Server 2005 SP1 及以前的版本,键查找被称为书签查找。

当查询请求少量数据时,SQL Server 优化器将试图使用在查询结果列或包含在WHERE语句中列的非聚集索引,检索数据。如果查询请求的数据没有呈现在非聚集索引中,SQL Server 必须返回数据页去获取这些列中的数据。无论表是否有聚集索引,查询仍将到表或聚集索引中检索数据。

上面的场景中,如果表有聚集索引,其被称为键查找 (key lookup,或书签查找bookmark lookup);如果表没有聚集索引,但是有一个非聚集索引,其被称为 RID 查找。这种操作消耗很大。为优化任何包含键查找或RID查找的查询,其应该从查询计划中被移除。有两种不同的移除键查找或RID查找的方法。

在弄清楚这两种方法之前,我们将创建没有聚集索引的测试表,激发RID查找。RID 查找是使用提供的行标识符(row identifier ,RID)在堆上的书签查找。

现在让我们运行下面的查询语句,并检查查询计划

MSSQL索引优化之移除键查找(书签查找)或RID查找

因为表上没有索引,执行的是全表扫描(Table Scan)。我们将在表上创建一个聚集索引,然后再次检查执行计划。

现在再次运行如下查询

MSSQL索引优化之移除键查找(书签查找)或RID查找

执行计划清晰的表明,当表上创建聚集索引后,Table Scan 现在转变为 Clustered Index Scan。在这两种情况下,基本表都是完全扫描的,表上没有搜索。

现在,让我们看一下查询的WHERE 语句。直观上来看,如果我们在表上创建包含WHERE语句中字段列的索引,可能会获得性能提升。让我们在表上创建一个非聚集索引,然后再检查执行计划。

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
MSSQL索引优化之移除键查找(书签查找)或RID查找后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章
验证码:
请关注本站微信公众号,回复“小麦苗博客”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部