新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > 数据库 > 数据库综合 > 正文:数据库性能调优技术──单表执行计划

数据库性能调优技术──单表执行计划

新客网 XKER.COM 2008-02-02 来源:赛迪网 37889 收藏本文

该执行计划的执行流程为:

(1)CSEK使用c1=2查找非聚集索引,得到c1=2的索引记录(2,rowid1)中的rowid1(为数值)。使用rowid1查找聚集索引得到对应的数据记录(2,2)传递给RSET,将控制权传给RSET。(当然,有人也许会问,假如没有记录满足c1=2怎么办呢?那么,此处什么记录都不传递给RSET,通知RSET查询操作结束,最后返回空集给客户端)。

(2)RSET将记录(2,2)放入结果集,操作结束(因为是唯一索引,所以最多只有1条记录满足c1=2)。

(3)发送结果集(包含记录(2,2))给客户端。

这里我们发现,例3使用了唯一索引,例2使用了非唯一索引。例3的执行速度大于例2的执行速度。

4.如何理解执行计划中的top n操作?

查询语句“select top 10 * from t1 where c1>2;”对应的执行计划为:

#RSET:[21, 1, 1]; 
#XTOP:[0, 0, 0]; top_off(0), top_num(10) 
#XFLT:[0, 0, 0]; EXPR1 > 2 
#CSEK:[21, 1, 1]; INDEX33555545(T1), FULL_SCAN

XTOP(取得前N条记录):将XFLT操作符传递来的记录放入到RSET(结果集)中,并判定记录数是否已经等于给定值10(语句中的top 10)。假如已经等于10,则查询已经执行成功,退出。否则将控制权限传给XFLT,继续执行。依次执行,直到取得10条记录,或者表CSEK操作已经查询结束(即符合条件的记录不满10条)。

5.如何理解执行计划中的order by操作?

查询语句“select top 10 * from t1 where c2>2 order by c1;”对应的执行计划为:

#RSET:[21, 1, 1]; 
#XSORT:[0, 0, 0]; keys_num(1), is_distinct(FALSE) 
#XFLT:[0, 0, 0]; EXPR1 > 2 
#CSEK:[21, 1, 1]; INDEX33555545(T1), FULL_SCAN

XSORT(对记录进行排序):将XFLT操作符传递来的记录插入到XSORT维护的临时空间中的合理位置,按c1进行有序排列。然后将控制权传给XFLT以取得下一条符合条件的记录。等处理完所有符合条件的记录。XSORT操作符才会将控制权限传给RSET。

6.是不是查询语句中一旦出现order by字句,执行计划中就会出现XSORT操作符?

不是。比如,查询语句“select c1 from t1 order by c1;”对应的执行计划为:

#RSET:[0, 0, 0]; 
#CSEK:[0, 0, 0]; UIT1C1(T1), FULL_SCAN

从执行中我们可以看出,达梦直接对索引UIT1C1进行全索引扫描,对于得到的每一条记录不需要进行XSORT排序操作,直接放入RSET(结果集)中。因为索引UIT1C1本身就是按照c1进行排序的。

7.有文档说,对于语句“select max(c1) from t1”,可以在c1列上创建索引从而查询速度变快。那么在执行计划中是如何体现的呢?

查询语句“select max(c1) from t1”对应的执行计划:

#RSET:[0, 0, 0]; 
#XEVL:[0, 0, 0]; 
#FAGR:[0, 0, 0]; function_num(1)

在这个执行计划中,我们没有看到CSEK操作符。因为c1上存在索引UIT1C1,该索引叶子节点的最右端就是c1的最大值。FARG直接返回该最大值。语句“select min(c1) from t1;”、语句“select count(*) from t1;”的执行原理一样。XEVL是表达式计算,本文不进行讲解。

共4页: 上一页 [1] [2] [3] [4] 下一页
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐