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

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

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

(2)XFLT(过滤)类似于上文中描述的步骤2,“EXPR0 = 2”是过滤条件。

(3)RSET(结果集)类似于上文中描述的步骤3,用来存放符合条件的记录集。

我们可以看出,数据库的执行过程和我们用语言描述的步骤是一致的。

该查询语句完整的执行流程如下:

(1)CSEK取得第一条记录(1,1)传给XFLT,将控制权传给XFLT。

(2)XFLT发现该记录(1,1)不符合条件,将控制权传给CSEK。

(3)CSEK取得下一条记录(2,2)传给XFLT,将控制权传给XFLT。

(4)XFLT发现记录(2,2)符合条件,将该记录传给RSET,将控制权传给RSET。

(5)RSET将记录(2,2)放入结果集,将控制权传给XFLT。

(6)XFLT给控制权传给CSEK。

(7)CSEK取得下一条(3,3)传给XFLT,将控制权传给XFLT。

(8)XFLT发现该记录(3,3)不符合条件,将控制权传给CSEK。

(9)CSEK取得下一条(4,4)传给XFLT,将控制权传给XFLT。

(10)XFLT发现该记录(4,4)不符合条件,将控制权传给CSEK。

(11)CSEK取得下一条(5,5)传给XFLT,将控制权传给XFLT。

(12)XFLT发现该记录(5,5)不符合条件,将控制权传给CSEK。

(13)CSEK取得下一条(6,6)传给XFLT,将控制权传给XFLT。

(14)XFLT发现该记录(6,6)不符合条件,将控制权传给CSEK。

(15)CSEK发现描述操作已经结束,通知XFLT结束。将控制权传给XFLT。

(16)XFLT得知查询操作结束,通知RSET结束。将控制权传给RSET。

(17)RSET得知操作结束。

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

  

2.假如表t1上的c1列有非唯一索引,如何执行呢?

表t1的定义以及数据和1中描述的一样。

创建索引:

create index it1c1 on t1(c1);

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

#RSET:[201, 2, 1]; 
#CSEK(SECOND):[201, 2, 1]; 
IT1C1(T1), INDEX_EQU_SEARCH

CSEK行的“SECOND”表示使用非聚集索引“IT1C1”,对该索引进行索引等值(INDEX_EQU_SEARCH)查找。

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

(1)CSEK使用c1=2查找非聚集索引,得到第一条c1=2的索引记录(2,rowid1)中的rowid1(为数值)。使用rowid1查找聚集索引得到对应的数据记录(2,2)传递给RSET,将控制权传给RSET。

(2)RSET将记录(2,2)放入结果集,将控制权传给CSEK。(因为c1上的索引是非唯一的,所以可能出现两条以上的记录满足c1=2,所以需要将控制权传给CSEK)。

(3)CSEK取得当前非聚集记录的下一条记录(3,rowid2),因为3!=2,所以扫描结束。将控制权传给RSET。(假如满足c1=2的记录数大于1条,需要继续传递记录给RSET,以此类推,直到碰到不满足c1=2的那条记录,结束操作。)

(4)RSET得知操作结束。

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

3.假如表t1上的c1列有唯一索引,如何执行呢?

首先删除c1列上的非唯一索引,然后在c1列上创建唯一索引:

drop index it1c1; 
create unique index uit1c1 on t1(c1);

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

#RSET:[201, 2, 1]; 
#CSEK(SECOND):[201, 2, 1]; UIT1C1(T1), INDEX_EQU_SEARCH

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