欢迎来到天天文库
浏览记录
ID:35294978
大小:78.00 KB
页数:7页
时间:2019-03-23
《sql语句优化总结[1]》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、数据库优化总结一、前言1二、在SELECT子句中避免使用‘*’1三、删除重复记录1四、计算记录条数2五、减少对表的查询2六、EXISTS与IN使用2七、使用索引3八、UNION与UNIONALL的使用4九、驱动表的选择5十、Where语句中条件的顺序5十一、使用where代替having语句5十二、使用表的别名5十三、表记录删除6十四、Decode函数使用6十五、尽量少用子查询6十六、SQL语句拆分6十七、SQL语句中参数的使用7十八、解释计划7一、前言下面是对使用ORACLE的SQL语句的一些优化总结,借鉴了一些资
2、料和自己的经验总结,只是部分优化方法,甚至可能还会有不准确的地方,希望看官给予补充我修正,以提高大家写SQL语句的水平。二、在SELECT子句中避免使用‘*’当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用‘*’是一个方便的方法.不幸的是,这是一个非常低效的方法.实际上,ORACLE在解析的过程中,会将’*’依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间.三、删除重复记录最高效的删除重复记录方法(因为使用了ROWID)DELETEFROMEMPEWHEREE.
3、ROWID>(SELECTMIN(X.ROWID)FROMEMPXWHEREX.EMP_NO=E.EMP_NO)Oracle的ORWID用来唯一标识表中的一条记录,是这条数据在数据库中存放的物理地址一、计算记录条数计算记录数一般count(*),count(1),count(索引)三种写法,使用count(索引)方法是最快的,另两种哪个快说法不一,但通过实际测试差不太多二、减少对表的查询在写SQL语句时要减少对表的查询,即能通过对表一次查询取得结果就不要查两次。例1:Select*fromclmb01cWherecj
4、xsdm=(selectmax(cjxsdm)fromclmb10)Andcsqdh=(selectmin(csqdh)fromclmb10)Whereid=833997可改成Select*fromclmb01cWhere(cjxsdm,csqdh)=(selectmax(cjxsdm),min(csqdh)fromclmb10)whereid=833997;更新也一样Updateclmb01cset(cjxsdm,csqdh)=(selectmax(cjxsdm),min(csqdh)fromclmb10)Wher
5、eid=833997;当然此例还有其它写法,在此拿出只是说明观点例2:Updateclmb01csetcdjzt=‘1’whereid=833997;Selectnhjjeinton_hjjefromclmb01cwhereid=833997;以上两语句可合成一个Updateclmb01csetcdjzt=‘1’whereid=833997returningnhjjeinton_hjje;三、EXISTS与IN使用对于这两个操作符,通常认为EXISTS会比IN效率高,特别是EXISTS的子查询语句可用到索引时会比IN
6、效率高Oracle在处理这两个操作时处理如下:IN:Oracle将IN后面的子查询语句调入到内存,然后排序,如果记录多会非常占用系统资源EXISTS:在每次查询时调用一次子查询语句,所以就要保证子查询语句能使用索引,否则就会全表扫描,如果记录数很多那是很可怕的事情,会产生迪卡尔乘积结论:记录小的时候用哪个都对效率没有多大影响,对于记录大时一定要使用EXISTS,并保存子查询使用索引对于NOT EXISTS和NOT IN一定要选用NOT EXISTS,还可使用(外连接+判断为空)一、使用索引对于数据量大的表一定要建立适
7、当的索引,正确的使用索引可以级大的提高数据检索效率,在写SQL语句时要考虑表索引的使用,但索引的缺点一是增加物理空间的占用,二是对表的增、删、改会增加一次索引的增、删、改操作,所以对于大表要建立并使用索引,但不能过多使用索引要注意以下几点:1.要按索引列构造SQL语句的where条件才能使用到索引2.使用不等于操作符则不能使用索引例:selectcol1,col2fromtable1wherecol1<>‘AA’如果列col1是索引则此写法不能使用索引,同样还有notin(‘AA’)那出现这种问题如何解决呢?那就要改
8、变这种写法,比如判断的条件值有‘AA’,‘BB’,‘CC’则条件改写成col1=‘BB’orcol1=‘CC’3.使用isNULL则不能使用索引如上例:wherecol1isNULL不会使用索引对于索引列要避免出现NULL值4.LIKE操作符的使用对于LIKE使用时后面的条件前面不能有通配符,否则不能使用索引selectcol1,col2fro
此文档下载收益归作者所有