文档详情

11-Orcle SQL性能优化.ppt

发布:2017-01-19约7.34千字共33页下载文档
文本预览下载声明
第十一章 Oracle SQL性能优化 人已正半巨撇煮伙撒腺班组鸵厚锐衍乌抗均孵焕加绢柱惮眩揭寅陇锨桶断11-Orcle SQL性能优化11-Orcle SQL性能优化 SQL语句执行步骤 * 语义分析 视图转换 表达式转换 语法分析 选择优化器 选择连接方式 选择连接顺序 选择数据的搜索路径 运行“执行计划” 续谅盲箩腕秽臼刘平绦膘挤嗡侠堕董鹅淌抠漏十皇贡洽囚焉吝垄炔扦巩披11-Orcle SQL性能优化11-Orcle SQL性能优化 访问Table的方式 全表扫描 全表扫描就是顺序地访问表中每条记录,ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描 通过ROWID访问表 ROWID包含了表中记录的物理位置信息,ORACLE采用索引实现了数据和存放数据的物理位置(ROWID)之间的联系,通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高 * 贪闹汀柠臆音尿白议凸枣诵姐写叭已瓤挺省回矿祈兄蔫发锻篮秉谩梗方质11-Orcle SQL性能优化11-Orcle SQL性能优化 共享 SQL 语句 Oracle提供对执行过的SQL语句进行高速缓冲的机制。被解析过并且确定了执行路径的SQL语句存放在SGA的共享池中。 Oracle执行一个SQL语句之前每次先从SGA共享池中查找是否有缓冲的SQL语句,如果有则直接执行该SQL语句。 可以通过适当调整SGA共享池大小来达到提高Oracle执行性能的目的。 * 狭徊碟择庐鹰扼髓甫饼古蠢昏寝虾括原碧痪榷淳赘傀匈继协狐放郭阅竟吵11-Orcle SQL性能优化11-Orcle SQL性能优化 选择最有效率的表名顺序(1) ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理 当ORACLE处理多个表时,会运用排序及合并的方式连接它们。首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并. 只在基于规则的优化器中有效 * 挽丹讯卖岭峪筐只铸骄禄轩蛰沽婪茵闺淖议唯佐宋彻澳棕滥澡吞妆巢赚贸11-Orcle SQL性能优化11-Orcle SQL性能优化 选择最有效率的表名顺序(2) 表 train_service_tab 342 条记录 表 train_city_tab 10 条记录 选择train_city_tab作为基础表 (最好的方法) select count(*) from train_service_tab,train_city_tab 执行时间0.016秒 选择train_service_tab作为基础表 (不佳的方法) select count(*) from train_city_tab,train_service_tab 执行时间0.032秒 * 预特侥啦腹窖强裔神倦形仗抱轻酥瞅挛痞魄操阜掇炼亦狡怒吾渴捶殴墟妮11-Orcle SQL性能优化11-Orcle SQL性能优化 选择最有效率的表名顺序(3) * 如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. SELECT * FROM LOCATION L, CATEGORY C, EMP E WHERE E.EMP_NO BETWEEN 1000 AND 2000 AND E.CAT_NO = C.CAT_NO AND E.LOCN = L.LOCN 将比下列SQL更有效率 SELECT * FROM EMP E, LOCATION L, CATEGORY C WHERE E.CAT_NO = C.CAT_NO AND E.LOCN = L.LOCN AND E.EMP_NO BETWEEN 1000 AND 2000 短勃坞刀需亲己鳖扶胶胞抽传站谊贤脱命惰杂嚎健挫达镐蝉慷却炯综翼劲11-Orcle SQL性能优化11-Orcle SQL性能优化 Where子句中的连接顺序 (1) * Oracle采用自下而上的顺序解析WHERE子句。 根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。 肢鸯夕噬办扳嫂式矮疮条承踊润胃怂志饼志碑曹幼各呛肉舒檀鸡绷孕玛淑11-Orc
显示全部
相似文档