SQL数据库索引(9)-Indexing for OR_SQL SERVER数据库_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

SQL数据库索引(9)-Indexing for OR

作者:黑客防线网安SQL维护基地 来源:黑客防线网安SQL维护基地 浏览次数:0

黑客防线网安网讯:  名字描述列  member_corporation_linknonclustered located on PRIMARYcorp_no  member_identclustered, unique, primary key located on PRIMARYmember_no  member_region_linkn...
  名字描述列
  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 次。
  他们俩个的执行计划如下图,点击看大图:
  
 
  知识点小结:
  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搜索关键字的对应索引。则系统会使用这个索引。
  如果没有,则遍历(表遍历或者索引遍历)是高性能的选择。
    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-11464-1.html
网站维护教程更新时间:2012-03-21 03:21:57  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer