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

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

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

8.假如列上存在索引,如何理解中的group by操作?

查询语句“select c1,count(*) from t1 where c1>=2 group by c1;”对应的执行计划为:

#RSET:[11, 1, 1]; 
#XEVL:[0, 0, 0]; 
#SAGR:[0, 0, 0]; group_by_num(1), function_num(1) 
#CSEK:[11, 1, 1]; UIT1C1(T1), INDEX_GE_SEARCH

我们可以得到,CSEK使用了索引UIT1C1进行了范围查找。首先传递给SARG的是连续的c1=2的记录组,然后是c1=3的记录组,然后是c1=4的记录组,……

此处SARG的执行流程是

(1)从CSEK取得一条c1=2记录,将计数加1。

(2)从CSEK取得下一条记录,假如该记录满足c1,将计数 1。

(3)重复执行步骤2,直到取得第一条不满足c1=2的记录,将(2,对应的计算)传递给XEVL,再传给RSET(结果集)。接着对c1=3的记录组执行同样的流程。

依此类推,直到处理完所有符合条件的记录。

这里我们的分组函数是count(*),假如是其它的分组函数,处理过程类似。

9.假如列上不存在索引,如何理解中的group by操作?

查询语句“select c2,count(*) from t1 where c2>=2 group by c2;”对应的执行计划为:

#RSET:[21, 1, 1]; 
#XEVL:[0, 0, 0]; 
#HAGR:[0, 0, 0]; group_by_num(1), function_num(1) 
#XFLT:[0, 0, 0]; EXPR0 >= 2 
#CSEK:[21, 1, 1]; INDEX33555550(T1), FULL_SCAN

这里因为c2上没有索引,HARG的作用是HASH分组。

HARG的执行流程是:

(1)从XFLT取得一条记录

(2)记录的c1=m,假如在hash表中已经对应项,计数 1,假如不存在对应项,在创建一个新的hash项。

(3)所有的符合过滤条件的记录处理完成之后,HARG才会将控制权限传给上层操作符,HARG每次向上层操作符传递一条(m,m对应的计数)。

这里我们的分组函数是count(*),假如是其它的分组函数,处理过程类似。

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