当前位置: 网学 > 编程文档 > SQL SERVER > 正文

浅析DM数据库in\exists子查询

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/19
下载{$ArticleTitle}原创论文样式
erge半连接,对于有序的表之间的exists子查询采用该连接,条件是子查询中的表建有索引,并且索引列是两个表的连接列。

  例如:

以下是引用片段:
  create table t1(c1 int,c2 int);
  create table t2(d1 int,d2 int);
  create index it2d1 on t2(d1);
  select * from t1 where exists (select d1 from t2 where c1=d1);

  执行计划:

以下是引用片段:
  #RSET:[0, 0, 0];
  #SMRG:[0, 0, 0];
  #XSORT:[0, 0, 0]; keys_num(1), is_distinct(FALSE)
  #CSEK:[0, 0, 0]; INDEX33555528(t1), FULL_SCAN
  #CSEK:[11, 1, 1]; it2d1(T2), INDEX_GE_SEARCH

  分析:从执行计划看出,首先对t1表以c1列为key进行排序,t2表使用索引扫描,由于t1表、t2表均为有序表,该子查询转换为归并半连接,t1表取第一条记录与t2表记录比较,如果t2表中存在一条c1=d1的记录,则将t1表当前行输出到结果集,继续取t1表下一条记录,同时t2表继续从下一行开始向后扫描;否则,t1、t2表同时将游标指向下一条记录,重复上述操作。直到t1表或者t2表扫描完毕即结束,一趟扫描即可完成。

  以上是对达梦数据库中in\exists子查询的简单分析,在具体的实际应用中,可以根据情况进行转化,提高语句的执行效率。

  • 下一篇资讯: 需要DBA深思的面试问题
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号