版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ORACLE基于SQL查询优化培训文档2013年11月查询优化基本准则详解2ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表drivingtable)将被最先处理。在
FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。例如:表TAB116384条记录表TAB21条记录选择TAB2作为基础表(最好的方法)selectcount(*)fromtab1,tab2执行时间0.96秒选择TAB2作为基础表(不佳的方法)selectcount(*)fromtab2,tab1执行时间26.09秒查询优化基本准则详解3ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。例如:(低效,执行时间156.3秒)SELECT…FROMEMPEWHERESAL>50000ANDJOB=‘MANAGER'AND25<(SELECTCOUNT(*)FROMEMPWHEREMGR=E.EMPNO);(高效,执行时间10.6秒)SELECT…FROMEMPEWHERE25<(SELECTCOUNT(*)FROMEMPWHEREMGR=E.EMPNO)ANDSAL>50000ANDJOB=‘MANAGER';在进行多表关联时,多用Where语句把单个表的结果集最小化,多用聚合函数汇总结果集后再与其它表做关联,以使结果集数据量最小化查询优化基本准则详解4减少对表的查询在含有子查询的SQL语句中,要特别注意减少对表的查询例如:低效SELECTTAB_NAMEFROMTABLESWHERETAB_NAME=(SELECTTAB_NAMEFROMTAB_COLUMNSWHEREVERSION=604)ANDDB_VER=(SELECTDB_VERFROMTAB_COLUMNSWHEREVERSION=604)高效SELECTTAB_NAMEFROMTABLESWHERE(TAB_NAME,DB_VER)=(SELECTTAB_NAME,DB_VER)FROMTAB_COLUMNSWHEREVERSION=604)查询优化基本准则详解5用EXISTS替代IN在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。在这种情况下,使用EXISTS(或NOTEXISTS)通常将提高查询的效率。使用exists而不用IN因为Exists只检查行的存在,而in检查实际值例如:低效SELECT*FROMEMP(基础表)WHEREEMPNO>0ANDDEPTNOIN(SELECTDEPTNOFROMDEPTWHERELOC=‘MELB')高效SELECT*FROMEMP(基础表)WHEREEMPNO>0ANDEXISTS(SELECT‘X'FROMDEPTWHEREDEPT.DEPTNO=EMP.DEPTNOANDLOC=‘MELB')用IN的SQL性能总是比较低,原因是:对于用IN的SQL语句ORACLE总是试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录如果转换成功就转换成多个表的连接。因此不管理怎么,用IN的SQL语句总是多了一个转换的过程。因此在业务密集的SQL当中尽量不采用IN操作符。查询优化基本准则详解6用NOTEXISTS替代NOTIN在子查询中,NOTIN子句将执行一个内部的排序和合并。无论在哪种情况下,NOTIN都是最低效的(因为它对子查询中的表执行了一个全表遍历)。为了避免使用NOTIN,我们可以把它改写成外连接(OuterJoins)或NOTEXISTS.例如:SELECT…FROMEMPWHEREDEPT_NONOTIN(SELECTDEPT_NOFROMDEPTWHEREDEPT_CAT='A');为了提高效率。改写为:SELECT….FROMEMPEWHERENOTEXISTS(SELECT‘X'FROMDEPTDWHERED.DEPT_NO=E.DEPT_NOANDDEPT_CAT=‘A');NOTIN操作符此操作强烈推荐不使用,因为其不能应用表的索引。如遇这种情况,应该用EXISTS,NOTEXISTS方案代替。查询优化基本准则详解7用EXISTS替换DISTINCT当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在
SELECT子句中使用DISTINCT.一般可以考虑用EXIST替换例如:低效:SELECTDISTINCTDEPT_NO,DEPT_NFROMDEPTD,EMPEWHERED.DEPT_NO=E.DEPT_NO高效:SELECTDEPT_NO,DEPT_NAMEFROMDEPTDWHEREEXISTS(SELECT‘X'FROMEMPEWHEREE.DEPT_NO=D.DEPT_NO);查询优化基本准则详解8用表连接替换EXISTS通常来说,采用表连接的方式比EXISTS更有效率例如:SELECTENAMEFROMEMPEWHEREEXISTS(SELECT‘X'FROMDEPTWHEREDEPT_NO=E.DEPT_NOANDDEPT_CAT=‘A');为了提高效率。改写为:SELECTENAMEFROMDEPTD,EMPEWHEREE.DEPT_NO=D.DEPT_NOANDDEPT_CAT=‘A';查询优化基本准则详解9避免在索引列上使用计算WHERE子句中,如
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 班服课件教学课件
- 产科心理护理与支持
- 鼻饲在脑卒中康复中的应用
- CVVH通路护理常规
- 秋季尘肺病患者用药指导
- 毒品安全课的课件幼儿园
- 女岛码头作业区投资项目风险管理:策略与实践
- 女大学生依恋模式与肥胖谈论对身体不满意的交互影响研究
- 套建增层预应力型钢混凝土梁 钢管混凝土核心柱框架的弹塑性地震反应特性与抗震策略研究
- 夹层基金在中国资本市场的发展路径与展望
- 2025年甘肃省张掖市培黎职业学院招聘非事业编制工作人员14人(公共基础知识)测试题附答案解析
- 机关单位绩效考核系统建设方案
- 借用公司签合同协议
- 外耳道湿疹的护理
- 鼻炎中医讲课课件
- 孔隙率测定方法
- 2025 初中中国历史一二九运动的爆发课件
- 技术开发文档编写与归档规范
- 2025年国家开放大学《数据分析与统计》期末考试备考题库及答案解析
- 《算法设计与分析》期末考试试卷及答案
- 2025年高考真题-化学(四川卷) 含答案
评论
0/150
提交评论