ORACLESQL语句优化资料共享

ORACLESQL语句优化资料共享

ID:37252179

大小:242.50 KB

页数:42页

时间:2019-05-12

ORACLESQL语句优化资料共享_第1页
ORACLESQL语句优化资料共享_第2页
ORACLESQL语句优化资料共享_第3页
ORACLESQL语句优化资料共享_第4页
ORACLESQL语句优化资料共享_第5页
资源描述:

《ORACLESQL语句优化资料共享》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、ORACLESQL 语句优化资料共享此内容参考:ORACLESQL性能优化系列.doc访问Table的方式ORACLE采用两种访问表中记录的方式:a.全表扫描全表扫描就是顺序地访问表中每条记录.ORACLE采用一次读入多个数据块(databaseblock)的方式优化全表扫描.b.通过ROWID访问表你可以采用基于ROWID的访问方式情况,提高访问表的效率,,ROWID包含了表中记录的物理位置信息..ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系.通常索引提供

2、了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高.删除重复记录最高效的删除重复记录方法(因为使用了ROWID)DELETEFROMEMPEWHEREE.ROWID>(SELECTMIN(X.ROWID)FROMEMPXWHEREX.EMP_NO=E.EMP_NO);基于索引的SQL语句优化1.ISNULL与ISNOTNULL2.联接列3.带通配符(%)的like语句4.Orderby语句5.NOT6.IN和EXISTS7.用表连接替换EXISTS8.用EXISTS替换DIST

3、INCT9.用WHERE替代ORDERBY10.用UNION替换OR(适用于索引列)11.用IN来替换OR1.ISNULL与ISNOTNULL不能用null作索引,任何包含null值的列都将不会被包含在索引中。即使索引有多列的情况下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。任何在where子句中使用isnull或isnotnull的语句优化器是不允许使用索引的。2.联接列对于有联接的列,即使最后的联接值为一个静态值,优化器不会使用

4、索引的。select*fromemployeewherefirst_name

5、

6、‘'

7、

8、last_name='GeorgeBush';使用索引的语句Select*Fromemployeewherefirst_name='George'andlast_name='Bush';select*fromemployeewherefirst_name=SUBSTR('&&name',1,INSTR('&&name','')-1)andlast_name=SUBSTR('&&name',INSTR('&&name

9、’,'')+1);3.带通配符(%)的like语句通配符(%)在搜寻词首出现,所以Oracle系统不使用的索引不使用索引的SQLselect*fromemployeewherelast_namelike'%Bush%';使用索引的SQLselect*fromemployeewherelast_namelike'c%';4.Orderby语句Orderby语句决定了Oracle如何将返回的查询结果排序。Orderby语句对要排序的列没有什么特别的限制,也可以将函数加入列中(象联接或者附加等)。任何在Or

10、derby语句的非索引项或者有计算表达式都将降低查询速度。仔细检查orderby语句以找出非索引项或者表达式,它们会降低性能。解决这个问题的办法就是重写orderby语句以使用索引,也可以为所使用的列建立另外一个索引,同时应绝对避免在orderby子句中使用表达式。5.逻辑表达式NOT不使用索引wherenot(status='VALID');wherestatus<>'VALID';wherestatus!='VALID';select*fromemployeewhere salary<>3000;

11、使用索引select*fromemployeewhere salary<3000orsalary>3000;6.IN和EXISTS...wherecolumnin(select*from...where...);...whereexists(select'X'from...where...);通过使用EXISTS,Oracle系统会首先检查主查询,然后运行子查询直到找到第一个匹配项,这就节省了时间。Oracle系统在执行IN子查询时,首先执行子查询,并将获得的结果列表存放在一个加了索引的临时表中。在执

12、行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。这也就是使用EXISTS比使用IN通常查询速度快的原因同时应尽可能使用NOTEXISTS来代替NOTIN,尽管二者都使用了NOT(不能使用索引而降低速度),但NOTEXISTS要比NOTIN查询效率更高7.用表连接替换EXISTS通常来说,采用表连接的方式比EXISTS更有效率SELECTENAMEFROMEMPEWHEREEXISTS(SELECT‘X’FROMDEPT

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。