Oracle RDBMS优化调整表连接.ppt
《Oracle RDBMS优化调整表连接.ppt》由会员分享,可在线阅读,更多相关《Oracle RDBMS优化调整表连接.ppt(53页珍藏版)》请在三一办公上搜索。
1、,Oracle RDBMS优化-调整表连接,赵元杰中程在线(北京)科技有限公司2009.8,2023/2/9,Oracle 数据库设计与性能,2/53,内容提要,表的访问方式;Oracle系统SQL优化器;调整表连接;,2023/2/9,Oracle 数据库设计与性能,3/53,表的访问方式,表的访问方式:全表扫描-顺序读取每个数据块到末尾;Hash(散列)获取-使用符合散列主键来为带有匹配Hash表中的记录创建rowidROWID访问-通过指定的rowid选定表的一个单记录:ROWID是最快的访问方式;Rowid是Oracle系统启动分配给表的每条记录的唯一地址;,2023/2/9,Orac
2、le 数据库设计与性能,4/53,表的访问方式,全表扫描:顺序读取每个数据块到末尾,从中选择所有记录;下面条件之一满足,Oracle采用全表扫描:当表不存在索引时;当查询语句不包含where语句时;当查询中使用like以%开始时;引用函数索引时;当使用基于CBO且表中的记录很少时;当参数optimizer_mode=all_rows时;,2023/2/9,Oracle 数据库设计与性能,5/53,表的访问方式,HASH访问:Oracle 对多个表的Cluster采用Hash Cluster存储,这样两个表的记录存放在一个块内;Hash访问是通过一个符号主键进行Hash运算后得到散列值(Hash
3、 Value),该散列确定记录所在的块;散列访问方法对于经常修改主符号键来说存在重定位记录的风险,所以建议在静态表的Cluster中使用散列访问方法(主键常改变不建议用);Oracle 的Cluster另见9i 10g 分区与簇文档。,2023/2/9,Oracle 数据库设计与性能,6/53,表的访问方式,ROWID访问:ROWID访问是得到单个记录的最快方法;Oracle 系统为每个表的每条记录自动分配ROWID,包括OOOOOOFFFBBBBBBRRR:OOOOOO-对象的相对号;FFF-文件的编号;BBBBBB-块的编号;RRR-块中的记录号;,2023/2/9,Oracle 数据库设
4、计与性能,7/53,表的访问方式,索引访问方式:Oracle有多种索引-B树索引、位图索引等;Oracle 系统可使用下面索引,包括:索引范围扫描;单个索引扫描;降序索引扫描;And_euql过滤器;,2023/2/9,Oracle 数据库设计与性能,8/53,内容提要,表的访问方式;Oracle系统SQL优化器;调整表连接;,2023/2/9,Oracle 数据库设计与性能,9/53,SQL优化器介绍,SQL优化器技术;优化器模式;基于规则的优化器调整;基于成本的优化器调整(10g/11g);设置优化器模式;迁移到基于成本的优化器调整;,2023/2/9,Oracle 数据库设计与性能,10
5、/53,SQL优化器介绍,SQL优化器技术:SQL优化器的目的是为SQL语句生成最快、消耗资源最少的执行计划;SQL优化器可以产生最快反应速度(First_rows模式),可产生最佳吞吐量的执行计划(all_rows模式)Oracle提供基于规则(RBO)和基于成本(CBO)的优化器模式;设置optimizer_mode=choose时两种模式交替使用;一般可通过Alter session来设置模式,如:Alter session set optimizer_goal=xxx;,2023/2/9,Oracle 数据库设计与性能,11/53,Query rewrite,Parse,选择优化RBO
6、/CBO,QueryExecution,产生执行计划,OPTIMIZER,Query,Result,SELECT 语句的执行过程(略),2023/2/9,Oracle 数据库设计与性能,12/53,SQL优化器介绍-RBO(略),基于规则的优化器(RBO):基本规则优化不使用表和索引的统计数据;RBO方法要探讨要实现最佳访问路径;RBO根据语句结构的不同来生成执行计划表;RBO采用迭代生成执行计划,并检查from后每个表以及表间连接方式,根据每个执行路径所消耗的成本进行排序,并选择最低的路径,下面是RBO步骤:生成一个可执行计划列表(包含所有访问路径);为每个执行计划指定级别数值;RBO选择级
7、别低的计划;RBO对所有可连接的表与级别结果的连接作评估;选择级别低的方法。,2023/2/9,Oracle 数据库设计与性能,13/53,SQLexecution,分析 PARSER,Optimizer Mode?,数据字典Dictionary,Cost-BasedOptimizer,Rule-BasedOptimizer,Row sourceGenerator,结果,统计数据,CBO,RBO,查询计划,用户,Select 语句的处理过程(略),2023/2/9,Oracle 数据库设计与性能,14/53,SQL优化器介绍-RBO(略),RBO与SQL操作:RBO将SQL语句分为不同的级别,
8、RBO根据这些级别确定执行计划:,1.ROWID单行读取2.Cluster单行连接读取(cluster)3.Cluster单行Hash连接读取(cluster)4.使用唯一索引的单行读取5.Cluster 连接(cluster)6.Hash Cluster连接(cluster)7.Cluster key索引连接(cluster)8.复合键,9.单列非唯一索引.10.索引列的范围搜索11.索引列的无范围搜索12.排序合并连接13.索引列的Max 或 Min14.索引列的Order by15.全表扫描.,2023/2/9,Oracle 数据库设计与性能,15/53,SQL优化器介绍-RBO(略),
9、RBO的特性:总是使用索引:如果表有索引可用,则使用索引;排序合并不使用索引;总是从驱动表开始:From最后的表为驱动表;总是不可避免情况下,才用全表扫描:RBO一般都用索引;特别指定不用索引(HINT-提示);任何索引都可以用:RBO用索引不一定好;有时越简单越好:8i之前系统可提供好的执行计划;9i后不建议采用RBO;10g建议采用 optimizer_mode=ALL_ROWS;,2023/2/9,Oracle 数据库设计与性能,16/53,SQL优化器介绍-CBO,CBO的特性:使用统计数据和数据字典来确定代价;CBO只是一个数字处理程序,处理:基本表访问代价;所有数据源的访问方法;并
10、行是否可用;连接的顺序与方法;OPTIMIZER_MODE 可以设置:CHOOSE,FIRST_ROWS,或 ALL_ROWS10g/11g 默认为ALL_ROWS,2023/2/9,Oracle 数据库设计与性能,17/53,SQL优化器介绍-CBO,CBO方法:基于代价的优化方法是按如下几步来进行:a)优化器在可能的存取路径及用户提示的基础下制订执行SQL语句的计划。b)根据表、cluster和索引在数据字典中存放的特性统计信息和数据分布的统计信息,计算出执行每个计划的代价。c)比较各个计划执行的代价,取其代价最低者来执行。10g/11g版本OPTIMIZER_MODE默认为ALL_ROW
11、S,2023/2/9,Oracle 数据库设计与性能,18/53,SQL优化器介绍-CBO需要,Table,cluster 统计:Number of rowsNumber of blocksNumber of empty blocksAverage row length列统计:Number of distinct values(NDV)in columnNumber of nulls in columnData distribution(histogram)索引统计:Number of Leaf blocksLevelsClustering factor,2023/2/9,Oracle 数据库
12、设计与性能,19/53,内容提要,表的访问方式;Oracle系统SQL优化器;调整表连接;,2023/2/9,Oracle 数据库设计与性能,20/53,表连接概念,Oracle 查询语句中FROM 子句:FROM子句最后的表(driving table)将被最先处理driving table驱动表,有时叫基础表或外部表,Select/*example*/FROM big,smallWHERE big.object_id=samll_object_idcall count cpu elapsed disk query-Parse 1 0.00 0.00 0 0Excute 1 0.00 0.0
13、0 0 0Fetch 32428 3.38 3.21 0 46977-Total 32430 3.38 3.22 0 46977Rows Row Source Operation-486400 HASH JOIN 1000 TABLE ACCESS FULL SAMLL 485400 TABLE ACCESS FULL BIG,记录少的表作为驱动表,driving table,Driven(inner)table,2023/2/9,Oracle 数据库设计与性能,21/53,调整表连接-ANSI表连接,ANSI表连接标准:等价连接:是标准连接,其中两个表的一对记录通过一个公共字段的匹配进行连接
14、等价连接的Oracle 表访问计划可以是NEST LOOPS,HASH JOIN或MERGE JOIN外部连接:是一个确保不完整记录的连接,两个表不存在完全匹配条件Oracle 返回满足条件的所有记录概念介绍参考10g SQL-高级查询,2023/2/9,Oracle 数据库设计与性能,22/53,调整表连接-ANSI表连接,ANSI表连接标准:自连接:是一种表和自身连接的特殊情况例如EMP表中MGR与EMPNO列就可进行自我连接反连接:当使用带有NOT IN或NOT EXIST子句的子查询时,经常采用反连接反连接经常是TABLE ACCESS FULL 访问方式半连接:半连接返回满足包含EX
15、IST子句的查询记录,即使条件右边有多条记录满足子查询的条件,该连接也不会复制谓词左边的记录半连接经常是TABLE ACCESS FULL 访问方式,2023/2/9,Oracle 数据库设计与性能,23/53,调整表连接-Oracle表连接,Oracle表连接方式,主要前3种:1.嵌套循环(Nested Loops-NL)2.排序-合并连接(Sort Merge Join-SMJ)3.哈希连接(Hash Join)4.星型连接(star Join)-数据仓库常用Oracle 9i/10g CBO下支持的连接:Nested Loops JoinOuter JoinSort-Merge Join
16、Hash JoinAnti-Join(反连接)Semi-Join(半连接),2023/2/9,Oracle 数据库设计与性能,24/53,1.调整表连接-NL,表连接方式-嵌套连接:嵌套循环(Nested Loops,NL)概念:这种连接方法有驱动表的概念,该连接过程就是一个2层嵌套循环;外层循环的次数越少越好(将小表或返回较小行表作为驱动表-用于外层循环)外层循环的次数并不能总保证使语句产生的I/O次数最少,有时不遵守这个理论反而会获得更好的效率内部连接过程(表A:row_source1、表B:row_source2):,Row source1的Row 1-探查-Row source 2Ro
17、w source1的Row 2-探查-Row source 2 Row source1的Row 3-探查-Row source 2.Row source1的Row n-探查-Row source 2,2023/2/9,Oracle 数据库设计与性能,25/53,1.调整表连接-NL,表连接方式-嵌套连接(续):嵌套循环(Nested Loops,NL)概念:Row source1为驱动表或外部表。Row Source2被称为被探查表或内部表;在NL连接中,Oracle读取row source1中的每一行,然后在row sourc2中检查是否有匹配的行,所有被匹配的行都被放到结果集中,然后处理r
18、ow source1中的下一行;如果driving row source(外部表)比较小,并且在inner row source(内部表)上有唯一索引或有高选择性非唯一索引时,使用这种方法可以得到较好的效率;NL有其它连接方法没有的一个优点是:可以先返回已经连接的行,而不必等待所有的连接操作处理完才返回数据,这可以实现快速的响应时间。,2023/2/9,Oracle 数据库设计与性能,26/53,1.调整表连接-NL,表连接方式-嵌套连接(续):嵌套循环(Nested Loops,NL)概念:如果不使用并行,可在驱动表加where 条件以返回较少行数据大表也可能作为驱动表,关键看限制条件;对于
19、并行查询,可选大表作为驱动表(充分利用并行);有时使用并行操作反而效率低(如该表有很少的行符合条件)硬件配置是否支持并行(如是否有多个CPU,多个硬盘控制器),要具体问题具体对待。下面是NL连接的例子:,SQL explain plan for SELECT a.dname,b.sqlfrom dept a,emp bwhere a.deptno=b.deptno;Query Plan-SELECT STATEMENT CHOOSE Cost=5NESTED LOOPSTABLE ACCESS FULL DEPT ANALYZEDTABLE ACCESS FULL EMP ANALYZED,2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle RDBMS优化调整表连接 RDBMS 优化 调整 连接
链接地址:https://www.31ppt.com/p-2282463.html