电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

Oracle+SQL优化规则

40页
  • 卖家[上传人]:1818****572
  • 文档编号:120879540
  • 上传时间:2020-02-11
  • 文档格式:DOC
  • 文档大小:189.50KB
  • / 40 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、Oracle语句优化规则整理目 录1.选用适合的ORACLE优化器22.访问Table的方式ORACLE 采用两种访问表中记录的方式23.共享SQL语句34.选择最有效率的表名顺序(只在基于规则的优化器中有效)45.WHERE子句中的连接顺序。56.SELECT子句中避免使用 * 67.减少访问数据库的次数68.使用DECODE函数来减少处理时间79.整合简单,无关联的数据库访问710.删除重复记录811.用TRUNCATE替代DELETE812.尽量多使用COMMIT913.计算记录条数914.用Where子句替换HAVING子句915.减少对表的查询1016.通过内部函数提高SQL效率。1117.使用表的别名(Alias)1218.用EXISTS替代IN1219.用NOT EXISTS替代NOT IN1320.用表连接替换EXISTS1321.用EXISTS替换DISTINCT1422.使用TKPROF 工具来查询SQL性能状态1523.用EXPLAIN PLAN 分析SQL语句1524.用索引提高效率1625.索引的操作1726.基础表的选择1827.多个平等的索引1928.等式

      2、比较和范围比较2029.不明确的索引等级2030.强制索引失效2131.避免在索引列上使用计算。2232.自动选择索引2333.避免在索引列上使用NOT2334.用=替代2435.用UNION替换OR (适用于索引列)2536.用IN来替换OR2837.避免在索引列上使用IS NULL和IS NOT NULL2838.总是使用索引的第一个列2939.ORACLE内部操作3040.UNION-ALL 替换UNION ( 如果有可能的话)3041.使用提示(Hints)3142.用WHERE替代ORDER BY3243.避免改变索引列的类型。3444.需要当心的WHERE子句3445.连接多个扫描3646.CBO下使用更具选择性的索引3747.避免使用耗费资源的操作3748.优化GROUP BY3849.使用日期3850.使用显式的游标(CURSORs)3951.优化EXPORT和IMPORT3952.分离表和索引391. 选用适合的ORACLE优化器 ORACLE的优化器共有3种:a. RULE (基于规则)b. COST (基于成本)c. CHOOSE (选择性) 设置缺省的优化器,可

      3、以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS . 你当然也在SQL句级或是会话(session)级对其进行覆盖。 为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须经常运行analyze 命令,以增加数据库中的对象统计信息(object statistics)的准确性。 如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze命令有关。 如果table已经被analyze过, 优化器模式将自动成为CBO , 反之,数据库将采用RULE形式的优化器。 在缺省情况下,ORACLE采用CHOOSE优化器,为了避免那些不必要的全表扫描(full table scan) , 你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器。2. 访问Table的方式ORACLE 采用两种访问表中记录的方式a. 全表扫描 全表扫描就是顺序地访问表中每条记录。 ORACLE采用一次读入多个数据块(dat

      4、abase block)的方式优化全表扫描。b. 通过ROWID访问表 你可以采用基于ROWID的访问方式情况,提高访问表的效率, ROWID包含了表中记录的物理位置信息ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系。 通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高。3. 共享SQL语句 为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中。这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享。 因此,当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同, ORACLE就能很快获得已经被解析的语句以及最好的执行路径。 ORACLE的这个功能大大地提高了SQL的执行性能并节省了内存的使用。 可惜的是ORACLE只对简单的表提供高速缓冲(cache buffering) ,这个功能并不适用于多表连接查询。 数据库管理员必须在init.ora中为这个区

      5、域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性也就越大了。 当你向ORACLE 提交一个SQL语句,ORACLE会首先在这块内存中查找相同的语句。 这里需要注明的是,ORACLE对两者采取的是一种严格匹配,要达成共享,SQL语句必须完全相同(包括空格,换行等)。共享的语句必须满足三个条件:A. 字符级的比较: 当前被执行的语句和共享池中的语句必须完全相同。 例如:SELECT * FROM EMP; 和下列每一个都不同 SELECT * from EMP; Select * From Emp; SELECT * FROM EMP;B. 两个语句所指的对象必须完全相同: 例如: 用户 对象名 如何访问 Jack sal_limit private synonym Work_city public synonym Plant_detail public synonym Jill sal_limit private synonym Work_city public synonym Plant_detail table owner考虑一下下列SQL语句能否在这两

      6、个用户之间共享。SQL 能否共享原因 select max(sal_cap) from sal_limit; 不能 每个用户都有一个private synonym - sal_limit , 它们是不同的对象 select count(*0 from work_city where sdesc like NEW%; 能 两个用户访问相同的对象public synonym - work_city select a.sdesc,b.location from work_city a , plant_detail b where a.city_id = b.city_id 不能 用户jack 通过private synonym访问plant_detail 而jill 是表的所有者,对象不同. C. 两个SQL语句中必须使用相同的名字的绑定变量(bind variables) 例如:第一组的两个SQL语句是相同的(可以共享),而第二组中的两个语句是不同的(即使在运行时,赋于不同的绑定变量相同的值)a.select pin , name from people where pin = :blk1

      7、.pin;select pin , name from people where pin = :blk1.pin;b. select pin , name from people where pin = :blk1.ot_ind;select pin , name from people where pin = :blk1.ov_ind;4. 选择最有效率的表名顺序(只在基于规则的优化器中有效) ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理。 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。当ORACLE处理多个表时, 会运用排序及合并的方式连接它们。首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并。 例如: 表 TAB1 16,384 条记录 表 TAB2 1 条记录 选择TAB2作为基础表 (最好的方法) select count(

      8、*) from tab1,tab2 执行时间0.96秒 选择TAB2作为基础表 (不佳的方法) select count(*) from tab2,tab1 执行时间26.09秒 如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表。 例如: EMP表描述了LOCATION表和CATEGORY表的交集。SELECT * FROM LOCATION L , CATEGORY C, EMP E WHERE E.EMP_NO BETWEEN 1000 AND 2000AND E.CAT_NO = C.CAT_NOAND E.LOCN = L.LOCN 将比下列SQL更有效率SELECT * FROM EMP E ,LOCATION L , CATEGORY CWHERE E.CAT_NO = C.CAT_NOAND E.LOCN = L.LOCNAND E.EMP_NO BETWEEN 1000 AND 20005. WHERE子句中的连接顺序。 ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。 例如:(低效,执行时间156.3秒)SELECT FROM EMP EWHERE SAL 50000AND JOB = MANAGERAND 25 (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO); (高效,执行时间10.6秒)SELECT F

      《Oracle+SQL优化规则》由会员1818****572分享,可在线阅读,更多相关《Oracle+SQL优化规则》请在金锄头文库上搜索。

      点击阅读更多内容
    TA的资源
  • 武汉专版七年级英语下册Unit1Canyouplaytheguitar第四课时作业课件新版人教新目标

    武汉专版七年级英语下册Unit1Canyouplaytheguitar第四课时作业课件新版人教新目标

  • 山西专版七年级英语下册Unit5Whydoyoulikepandas第三课时作业课件新版人教新目标

    山西专版七年级英语下册Unit5Whydoyoulikepandas第三课时作业课件新版人教新目标

  • 武汉专版七年级英语下册Unit1Canyouplaytheguitar第二课时作业课件新版人教新目标

    武汉专版七年级英语下册Unit1Canyouplaytheguitar第二课时作业课件新版人教新目标

  • 武汉专版七年级英语下册Unit5Whydoyoulikepandas第四课时作业课件新版人教新目标

    武汉专版七年级英语下册Unit5Whydoyoulikepandas第四课时作业课件新版人教新目标

  • 武汉专版七年级英语下册Unit5Whydoyoulikepandas第一课时作业课件新版人教新目标

    武汉专版七年级英语下册Unit5Whydoyoulikepandas第一课时作业课件新版人教新目标

  • 山西专版七年级英语下册Unit5Whydoyoulikepandas单元写作专项作业课件新版人教新目标

    山西专版七年级英语下册Unit5Whydoyoulikepandas单元写作专项作业课件新版人教新目标

  • 山西专版七年级英语下册Unit1Canyouplaytheguitar特色题型组合练作业课件新版人教新目标

    山西专版七年级英语下册Unit1Canyouplaytheguitar特色题型组合练作业课件新版人教新目标

  • 九年级历史上册第一单元古代亚非文明第3课古代尤作业课件新人教

    九年级历史上册第一单元古代亚非文明第3课古代尤作业课件新人教

  • 九年级历史上册第五单元走向近代第13课西欧经济和社会的发展作业课件新人教

    九年级历史上册第五单元走向近代第13课西欧经济和社会的发展作业课件新人教

  • 山西专版七年级英语下册Unit12Whatdidyoudolastweekend单元语法专项作业课件新版人教新目标

    山西专版七年级英语下册Unit12Whatdidyoudolastweekend单元语法专项作业课件新版人教新目标

  • 山西专版七年级英语下册Unit1Canyouplaytheguitar单元写作专项作业课件新版人教新目标

    山西专版七年级英语下册Unit1Canyouplaytheguitar单元写作专项作业课件新版人教新目标

  • 九年级历史下册第四单元经济大危机和第二次世界大战第14课法西斯国家的侵略扩张作业课件新人教版202105181

    九年级历史下册第四单元经济大危机和第二次世界大战第14课法西斯国家的侵略扩张作业课件新人教版202105181

  • 九年级历史上册第四单元封建时代的亚洲国家第11课古代日本作业课件新人教

    九年级历史上册第四单元封建时代的亚洲国家第11课古代日本作业课件新人教

  • 八年级英语下册Module1FeelingsandimpressionsUnit2IfeelnervouswhenIspeakChinese小册子作业课件新版外研版

    八年级英语下册Module1FeelingsandimpressionsUnit2IfeelnervouswhenIspeakChinese小册子作业课件新版外研版

  • 八年级英语下册Module9FriendshipUnit1CouldIaskifyou'vementionedthistoher小册子作业课件新版外研

    八年级英语下册Module9FriendshipUnit1CouldIaskifyou'vementionedthistoher小册子作业课件新版外研

  • 九年级化学上册第1章开启化学之门第3节怎样学习和研究化学第1课时课件沪

    九年级化学上册第1章开启化学之门第3节怎样学习和研究化学第1课时课件沪

  • 山西专版七年级英语下册Unit1Canyouplaytheguitar第二课时作业课件新版人教新目标

    山西专版七年级英语下册Unit1Canyouplaytheguitar第二课时作业课件新版人教新目标

  • 九年级历史下册第三单元第一次世界大战和战后初期的世界第11课苏联的社会主义建设教学课件新人教

    九年级历史下册第三单元第一次世界大战和战后初期的世界第11课苏联的社会主义建设教学课件新人教

  • 九年级历史上册第五单元走向近代第16课早期殖民掠夺作业课件新人教

    九年级历史上册第五单元走向近代第16课早期殖民掠夺作业课件新人教

  • 2021春七年级历史下册第二单元辽宋夏金元时期民族关系发展和社会变化第12课宋元时期的都市和文化习题课件新人教版

    2021春七年级历史下册第二单元辽宋夏金元时期民族关系发展和社会变化第12课宋元时期的都市和文化习题课件新人教版

  • 点击查看更多
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.