oracle语法效率优化应注意的若干细节

oracle语法效率优化应注意的若干细节

ID:32726839

大小:59.84 KB

页数:10页

时间:2019-02-15

oracle语法效率优化应注意的若干细节_第1页
oracle语法效率优化应注意的若干细节_第2页
oracle语法效率优化应注意的若干细节_第3页
oracle语法效率优化应注意的若干细节_第4页
oracle语法效率优化应注意的若干细节_第5页
资源描述:

《oracle语法效率优化应注意的若干细节》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Oracle语法效率优化应注意的若干细节一、尽量避免对列的操作任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等式的右边,甚至去掉函数。例:下列SQL条件语句中的列都建有恰当的索引,但30万行数据情况下执行速度却非常慢:select*fromrecordwheresubstrb(CardNo,1,4)=,5378,select*fromrecordwhereamount/30<1000select*fromrecordwhereto_char

2、(ActionTime,'yyyymmdd,)二'1999120T于where子句中对列的任何操作结果都是在SQL运行时逐行计算得到的,因此它不得不进行表扫描,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表扫描,因此可将SQL修改如下:select*fromrecordwhereCardNolike'5378%'select*fromrecordwhereamount<1000*30select*fromrecordwhereAction

3、Time=todate('19991201',‘yyyymmdd')二、避免不必要的类型转换尽量避免潜在的数据类烈转换。如将字符烈数据与数值型数据比较,ORACLE会自动将字符型用to_number()函数进行转换,从而导致全表扫描。例:表tabl中的列coll是字符型(char),则以下语旬存在类型转换:selectcol1,col2fromtablwherecoll>10应该写为:selectcoll,col2fromtablwherecoll〉'10‘三、增加查询的范围限制增加查询的范围限制

4、,避免全范围的搜索。例:以卜'查询表record中时间ActionTime小于2015年5月1日的数据:select*fromrecordwhereActionTime

5、)andActionTime>to_date('20110101',‘yyyymm')此SQL语句将利用ActionTime字段上的索引,从而提高查询效率。同理,对于大于某个值的查询,如果知道当前可能的最大值,也可以在Where子句中加上“AND列名〈MAX(最大值)”。四、尽量去掉〃IN〃、〃0R〃含有〃IN〃、〃0R〃的Where子句常会使用工作表,使索引失效;如果不产生大量重复值,可以考虑把子句拆开;拆开的子句中应该包含索引。例4:selectcount(*)fromstuffwhereid

6、_no(23秒)可以考虑将or子句分开:selectcount(*)fromstuffwhereid_no二'O'selectcount(*)fromstuffwhereid_no二T'然后再做一个简单的加法,与原来的SQL语句相比,查询速度更快。五、尽量去掉尽量去掉〃◊〃,避免全表扫描,如果数据是枚举值,且取值范围固定,则修改为〃0R〃方式。例:UPDATESERVTCETNFOSETSTATE^OWHERESTATEOO;以上语句由于其中包含了执行计划中用了全表扫描(TABLEACCESSFU

7、LL),没有用到state字段上的索引。实际应用中,市于业务逻辑的限制,字段state为枚举值,只能等于0,1或2,而且,值等于二1,2的很少,因此可以去掉〃◊勺利用索引来提高效率。修改为:UPDATESERVTCETNFOSETSTATENWHERESTATE二1ORSTATE二2o进一步的修改可以参考第4种方法。六、去掉Where了句中的ISNULL和ISNOTNULLWhere字句中的ISNULL和ISNOTNULL将不会使用索引而是进行全表搜索,因此需要通过改变查询方式,分情况讨论等方法,

8、去掉Where子句中的ISNULL和ISNOTNULL。七、索引提高数据分布不均匀时查询效率索引的选择性低,但数据的值分布差异很大时,仍然可以利用索引提高效率。表serv.info屮数据量很大,假设有一百万行,其屮有一个字段Flag,取值范圉为枚举值:[0,1,2,3,4,5,6,7]。按照索引建立的一般规则,该字段只有8种取值,索引值的重复率很高,索引选择性明显很低,因此不应该建索引。然而,由于该字段上数据值的分布情况非常特殊,具体如下表:取值范围占总数据量的百分比广51%698

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

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

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