前事不忘,后事之师,不忘国耻!

 注册  找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1973|回复: 0

SQL Server索引(9)-Indexing for OR

[复制链接]

SQL Server索引(9)-Indexing for OR

[复制链接]
ehxz

主题

0

回帖

7157

积分

管理员

积分
7157
2008-2-2 15:37:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
  我们仍然使用http://www.dbacn.com/dbabbs/view ... &extra=page%3D1中的 member 表,这时候,这个表的索引如下:
  名字描述列

  member_corporation_linknonclustered located on PRIMARYcorp_no

  member_identclustered, unique, primary key located on PRIMARYmember_no

  member_region_linknonclustered located on PRIMARYregion_no

  MemberFirstNamenonclustered located on PRIMARYfirstname

  MemberLastNamenonclustered located on PRIMARYlastname

  我们执行下面的查询

  SELECT m.LastName, m.FirstName, m.Region_No

  FROM dbo.Member AS m

  WHERE m.FirstName = 'Kimberly'

  OR m.LastName = 'Tripp'

  go

  我们用另外一个SQL来模拟 SQL 的执行计划,就是下面的语句:

  我们会看到上面语句跟下面的语句基本一样,只是一个是 Key Lookup ,一个是 Clustered Index Seek。 这里由于是模拟情况,可以认为是一样的。

  select m.LastName, m.FirstName, m.Region_No

  FROM dbo.Member AS m with(index(member_ident)),

  (

  select ww.Member_No from (

  select Member_No from dbo.Member where FirstName = 'Kimberly'

  union all

  select Member_No from dbo.Member where LastName = 'Tripp'

  ) ww

  group by ww.Member_No

  )

  n

  where m.Member_No = n.Member_No

  go

  这两个查询的扫描计数均是 2,逻辑读取均是 10 次。

  他们俩个的执行计划如下图,点击看大图:

001.JPG
  知识点小结:

  OR 会做什么?

  将多个结果集集合起来,上图中,使用 Merge Join(Concatenation)把数据汇集起来。

  保证每一个row只出现一回,上图中,使用Stream Aggregate(Aggregate)进行排重。

  上面的例子中,我们用 union 来演示 or的情况。 OR和UNION相似。不同之处如下:

  OR 根据 row’s unique identifier (RID or Clustering Key) 去掉副本

  UNION 根据 SELECT list 去掉副本

  UNION ALL 不去除副本

  OR 的一个简单应用就是 In 关键字。

  如果有In搜索关键字的对应索引。则系统会使用这个索引。

  如果没有,则遍历(表遍历或者索引遍历)是高性能的选择。
免责申明1、欢迎访问本站,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@dbabbs.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|DBA论坛中国 ( 鲁ICP备20017503号-2 )

GMT+8, 2024-5-5 12:18 , Processed in 0.080316 second(s), 12 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表