文件名称:
数据库性能调优技术2深入理解单表执行计划.pdf
开发工具:
文件大小: 207kb
下载次数: 0
上传时间: 2019-07-04
详细说明:数据库性能调优技术2深入理解单表执行计划,对单表执行计划详细分析资源由Www.eimhe.com美河学习在线收集提供
6)XHLT给控制权传给CSEK。
7)CSEK取得下一条(3,3)传给XFLT,将控制权传给XFLT。
8)ⅹILT发现该记录(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)XFIT发现该记录(6,6)不符合条件,将控制权传给CSEK。
15)CSEK发现摧述操作已经结束,通知ⅹHLT结東。将控制权传给XFLT。
16)XFIT得知查询操作结束,通知RSET结束。将控制权传给RSET
17)RSET得知操作结束
18)发送结果集(包含记录(2,2))给客户端。
2.如果表t1上的c1列有非唯一索引,如何执行呢?
表t1的定义以及数据和1中描述的一样,
创建索引:
create index itlcI on tI(cl);
查询语句“ select* from tl where cl=2;”对应的执行计划为:
RSET:[201,2,1]
#CSEK(SECOND): [201, 2,1; ITICI(TD), INDEX EQU SEARCH
CSEK行的“ SECOND”表示使用非聚集索引“ITlC1”,对该索引进行索引等值
( INDEX EQU SEARCH)合找。
该执行计划的执行流程为
)CSEK使用c1=2忄找非聚集索引,得到第一条c1-2的索引记录(2, rowid)
中的 rowid 1(为数值)。使用 rowid1查找聚集索引得到对应的数据记录(2,2)
传递给RSET,将控制权传给RSET。
2)RSET将记录(2,2)放入结果集,将控制权传给CSEK。(因为c1上的索引
是非唯的,所以可能出现两条以上的记录满足cl-2,所以需要将控制权传给
CSEK)。
3)CSEK取得当前非聚集记录的下一条记录(3, rowid2),因为3!=2,所以扫
描结束。将控制权传给RSET。(如果满足c1-2的记录数大于1条,需要继续传
递记录给RSET,以此类推,直到遇到不满足cl=2的那条记录,结束操作。)
4)RSET得知操作结束
5)发送结果集(包含记录(2,2))给客户端。
3如果表tl上的cl列有唯一索引,如何执行呢?
资源由www.eimhe.com美河学习在线收集提供
首先删除c1列上的非唯一索引,然后在c1列上创建唯一索引
drop index itIl
create unique index uitlcl on tI(c1):
查询语句“ select* from tl where c1=2;”对应的执行计划为
RSET:[201,2,1
HCSEK(SECOND ) [201,2, 1: UITICI(TD), INDEX EQU SEARCH
该执行计划的执行流程为:
1)CSEK使用c1=2找非聚集索引,得到c1=2的索引记录(2, rowid)中的
rowid1(为数值)。使用 rowid1查找聚集索引得到对应的数据记录(2,2)传递
给RSEI,将控制权传给RSEI。(当然,有人也许会问,如果没有记录满足cl-2
怎么办呢?那么,此处什么记录都不传递给RSET,通知RSET查询操作结束,
最后返回空集给客户端)。
2)RSET将记录(2,2)放入结果集,操作结束(因为是唯一索引,所以最多
只有1条记录满足cl=2)。
3)发送结果集(包含记录(2,2))给客户端。
这里我们发现,例3使用了唯一索引,例2使用了非唯一索引。例3的执行速
度大于例2的执行速度。
4如何理解执行计划中的topn操作?
查询语句 select top10* from tI where cl>2;”对应的执行计划为:
fRSET:[21,1,1};
#XTOP: [0, 0, 0; top off(0), top num(10)
#XFLT: [0, 0, 0; EXPRI>2
#CSEK: 21, 1, 1; INDEX33555545(T1), FULL SCAN
XTOP(取得前N条记录):将XFLT操作符传递来的记录放入到RSET(结
果集)中,并判断记录数是否已经等于给定值10(语句中的top10)。如果已经
等于10,则查询已经执行成功,退出。否则将控制权限传给ⅩFLT,继续执行。
依次执行,直到取得10条记录,或者表CSEK操作已经査询结束(即符合条件
的记录不满10条)
5如何理解执行计划中的 order by操作?
查询语句 select top10* from tl where c2>2 order by cl;”对应的执行计划为:
#RSET:[21,1,1;
#XSORT: [0, 0, 0]; keys num(1), is distinct(False)
#XFLT: [0, 0, 0; EXPRI>2
#CSEK: [21, 1,1]; INDEX33555545(T1), FULL SCAN
ⅹSORT(对记录进行排序):将XFLT操作符传递来的记录插入到ⅹSORT维
资源由Www.eimhe.com美河学习在线收集提供
护的临时空间屮的合理位置,按c1进行有序排列。然后将控制权传给XFLT以
取得下一条符合条件的记录。等处理完所有符合条件的记录。 XSORT操作符才
会将控制权限传给RSET
6是不是查询语句中一旦出现 order by字句,执行计划中就会出现 XSORT操作
符?
不是。
比如,查询语句“ select cI from tl order by cI;”对应的执行计划为
RSET:[0,0,0];
#CSEK: 0, 0, 0]: UITICI(TI), FULL SCAN
从执行中我们可以看出,达梦直接对索引 UITIC1进行全索引扫描,对于得到
的每条记录不需要进行ⅹSOR排序操作,直接放入RSET(结果集)中。因
为索引UIT1C1本身就是按照c1进行排序的。
7有文档说,对于语句 select max(c)fomt1”,可以在c1列上创建索引从而查
询速度变快。那么在执行计划中是如何体现的呢?
查询语句“ select max(cl) from t”对应的执行计划
开RSET:[0,0,0]
HXEVL:[0,0,0]
fFAGR: [0, 0, 0]; function num(1)
在这个执行计划中,我们没有看到CSEK操作符。因为c1上存在索引UIT1C1,
该索引叶子节点的最右端就是c1的最大值。FARG直接返回该最大值。语句
select mir(cl) from tI;”、语句“ select count(*) from t1;”的执行原埋一样。XEVL
是表达式计算,本文不进行讲解
8如果列上存在索引,如何理解中的 group by操作?
查询语句 select cI, count(*) from tI where cl>2 group by cl;”对应的执行计划
为
RSET:[1l,1,1];
#XEVL:[0,0,0]
#SAGR: [0, 0, 0] group by num(1), function num(1)
#CSEK [11, 1, 1; UITICI(T1), INDEX GE SEARCH
我们可以得到,CSEK使用了索引UITC1进行了范围查找。首先传递给SARG
的是连续的c1=2的记录组,然后是c1=3的记录组,然后是c1=4的记录组,
此处SARG的执行流程是
1)从CSEK取得一条c1=2记录,将计数加1,
2)从CSEK取得下一条记录,如果该记录满足c1,将计数+1。
资源由Www.eimhe.com美河学习在线收集提供
3)重复执行步骤2,直到取得第一条不满足cl=2的记录,将(2,对应的计算)传
递给XEVL,再传给RSET(结果集)。接着对cl-3的记录组执行同样的流程。
依此类推,直到处理完所有符合条件的记录
这里我们的分组函数是 count(*),如果是其它的分组函数,处理过程类似。
9.如果列上不存在索引,如何理解中的 group by操作?
查询语句“ select c2, counti(*) from tl 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; EXPRO>-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(*),如果是其它的分组函数,处理过程类似。
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.