


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
查询的其他优化方ORACLEFROMFROM择记录条数最少的表作为基础表。如果有3个以上的表连接查询,那就需要选择交叉表(intersectiontable)作为基础表,交叉表是指那个被其他表所的表.WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.SELECT*字典完成的,这意味着将耗费的时间SQL*PlusSQL*FormsPro*CARRAYSIZE数据库的检索数据量,建议值为200最高效的删除重复记录方法(因为使用了ROWID)例子:DELETEFROMEMPEWHEREE.ROWID(SELECTMIN(X.ROWID)FROMEMPXWHEREX.EMP_NO=E.EMP_NO);TRUNCATE替代rollbacksegmentsCOMMIT,ORACLETRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML)COMMIT所释放的资源:redologbuffer避免使用HAVING子句,HAVING只会在检索出所有记录之后才对结果集进行过滤.这WHERE子句限制记录的数目,那就能减少这方面oracle中)on、where、having这三个都可以加条件的子句中,on是最先执行,where,havingon是先把不符合条件的记录过滤后才进行统计,它sumonSELECTTAB_NAMEFROMTABLESWHERE(TAB_NAME,DB_VER)=(TAB_NAME,DB_VERFROMTAB_COLUMNSWHEREVERSION=一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误.EXISTSINNOTEXISTSNOTEXISTS(NOTEXISTSNOTINNOTIN的表执行了一个全表遍历).为了避免使用NOTIN我们可以把它改写成外连接(OuterJoins)或NOTEXISTS.(高效)SELECT*FROMEMPWHEREEMPNO0ANDEXISTSSELECTX'FROMDEPTWHEREDEPT.DEPTNO=EMP.DEPTNOANDLOC=‘MELB')(低效)SELECT*FROMEMPWHEREEMPNO0ANDDEPTNOIN(SELECTDEPTNOFROMDEPTWHERELOC=‘MELB')SELECTEXECUTIONS,DISK_READS,BUFFER_GETS,FROMV$SQLAREAWHEREEXECUTIONS>0ANDBUFFER_GETS>AND(BUFFER_GETS-DISK_READS)/BUFFER_GETS<0.8ORDERBY4DESC;B-tree结构.通常,通过索引查询数据比全表扫描要快.当ORACLE找出执行查询和Update语句的最佳路径时,ORACLE优化器将使用索引.同样在联结多个表时使用索引也另一个使用索引的好处是,它提供了主键(primarykey)的唯一性验证.。那些LONG或LONGRAW数据类型,你可以索引几乎所有的列.通常,在大型表中使用索引特别有效.当然,你也会发现,在扫描小表时,使用索引同样能提高效率.虽然使用索引能得到查询效率的提高,但是我们也必须注意到它的代价.索引需要空间来,也需要定期,每当有INSERTDELETE,UPDATE将为此多付出4,5次的磁盘I/O.因为索引需要额外的空间和处ALTERINDEXINDEXNAMEREBUILDTABLESPACENAME>(18)用EXISTS替换DISTINCT:SELECT块将在子查询的条件一旦满足后,立刻返回结果.例子:SELECTDISTINCTDEPT_NO,DEPT_NAMEFROMDEPTD,EMPEWHERED.DEPT_NO=E.DEPT_NOSELECTDEPT_NO,DEPT_NAMEFROMDEPTDWHEREEXISTS(SELECTFROMEMPEWHEREE.DEPT_NO=sqloraclesqlSELECT…FROMDEPTWHERESAL*12>SELECT…FROMDEPTWHERESAL>SELECT*FROMEMPWHEREDEPTNOSELECT*FROMEMPWHEREDEPTNODEPTNO=3DEPT3UNIONWHEREORORcolumn查询效率可能会因为你没有选择ORLOC_ID和REGIONSELECTLOC_ID,LOC_DESC,REGIONFROMLOCATIONWHERELOC_ID=10SELECTLOC_ID,LOC_DESC,REGIONFROMLOCATIONWHEREREGION=SELECTLOC_ID,LOC_DESC,REGIONFROMLOCATIONWHERELOC_ID=10ORREGION=SELECT….FROMLOCATIONWHERELOC_ID=10ORLOC_ID=20ORLOC_ID=SELECT…FROMLOCATIONWHERELOC_ININISNULLISNOT避免在索引中使用任何可以为空的列,ORACLE将无法使用该索引.对于单列索引,如ABA,B123,null)ORACLE1000都是空!因为空值不存在于索引列中,所以WHERE子句中对索引列进行空值比较将使ORACLE停用该索引.SELECT…FROMDEPARTMENTWHEREDEPT_CODEISNOTSELECT…FROMDEPARTMENTWHEREDEPT_CODE如果索引是建立在多个列上,只有在它的第一个列(leadingcolumnwhere子句引时,优化器使用了全表扫描而忽略了索引SQLUNIONUNION-ALLUNIONALLUNION,UNIONALLUNION下面的SQL可以用来查询排序的消耗量SELECTACCT_NUM,BALANCE_AMTFROMDEBIT_TRANSACTIONSWHERETRAN_DATE='31-DEC-95'SELECTACCT_NUM,BALANCE_AMTFROMDEBIT_TRANSACTIONSWHERETRAN_DATE='31-DEC-95'SELECTACCT_NUM,BALANCE_AMTFROMDEBIT_TRANSACTIONSWHERETRAN_DATE='31-DEC-95'UNIONALLSELECTACCT_NUM,BALANCE_AMTFROMDEBIT_TRANSACTIONSWHERETRAN_DATE='31-DEC-95'WHEREORDERORDERBY中所有的列必须定义为非空.DEPT_CODEPKNOTNULLDEPT_DESCNOTNULLDEPT_TYPENULLSELECTDEPT_CODEFROMDEPTORDERBYSELECTDEPT_CODEFROMDEPTWHEREDEPT_TYPE>假设EMPNO是一个数值类型的索引列.SELECT…FROMEMPWHEREEMPNO=SELECT…FROMEMPWHEREEMPNO=现在,假设EMP_TYPE是一个字符类型的索引列.SELECT…FROMEMPWHEREEMP_TYPE=SELECT…FROMEMP因为内部发生的类型转换,这个索引将不会被用到!为了避免ORACLE对你的SQL进行ORACLE(2)||执行耗费资源的排序(SORT)功能.DISTINCT需要一次排序操作,而其他的至少需要执UNION,MINUSINTERSECT的SQLSORT_AREA_S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学美术教学中的审美教育对学生综合素质的提升研究论文
- 校园周边广告对学生消费观念的影响与学校心理健康教育实践论文
- 基于创新教育的高中数学建模竞赛辅导策略研究论文
- 艺考生班级管理制度
- 苏美达集团管理制度
- 茶水间员工管理制度
- 蓝天教育集团高二年级下册期中考试语文试题(含答案)
- 财务规范计划
- 财务管理案例 教学组织方式 案例1-20
- 国际经济法专业本科生
- 2025年执业药师继续教育试题题库和参考答案(完整版)
- 《中医养生保健服务(非医疗)技术操作规范-砭术》-公示稿
- 《企业信息安全培训课件》
- 职业学院学生转专业申请表
- 2025年全国安全生产月安全知识竞赛题库及答案(共280题)
- 一例前交通动脉瘤破裂伴蛛网膜下腔出血的护理查房
- 心衰病人的护理查房
- 乳腺癌患者静脉管理
- 制造企业生产记录档案管理制度
- 急诊科临床诊疗指南-技术操作规范更新版
- 《接触网施工》课件 4.8.1 交叉线岔安装
评论
0/150
提交评论