您好,欢迎光临本网站![请登录][注册会员]  
文件名称: 数据库性能调优技术2深入理解单表执行计划.pdf
  所属分类: Oracle
  开发工具:
  文件大小: 207kb
  下载次数: 0
  上传时间: 2019-07-04
  提 供 者: qq_35******
 详细说明:数据库性能调优技术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最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 输入关键字,在本站1000多万海量源码库中尽情搜索: