oraclesql编写注意事项优化思路

oraclesql编写注意事项优化思路

ID:8972806

大小:21.04 KB

页数:3页

时间:2018-04-13

oraclesql编写注意事项优化思路_第1页
oraclesql编写注意事项优化思路_第2页
oraclesql编写注意事项优化思路_第3页
资源描述:

《oraclesql编写注意事项优化思路》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、SQL编写规则loulouevaSQL编写相关注意事项在编写SQL期间,以下方面需要多加考虑:1.杜绝仅仅以实现需求功能为出发点进行SQL编写;2.索引不应随意添加。索引可以提高查询速度,但当对表进行增删改操作时,需要花费一定资源对索引进行维护。过多索引将会影响数据库整体性能;3.绑定变量在使用时,尽量用于可选择性较高的WHERE条件字段。如某WHERE条件为时间类型,在对此字段进行范围查询时,用户实际查询范围从一天到一年不等。此种情况使用绑定变量后,可能造成执行计划解析不正确;4.SQL硬解析会消耗较多CP

2、U,为减少Oracle对SQL语句硬解析,在SQL书写方面,需要注意几点:a)SQL语句必须相同,包括大小写、空格、换行等;b)SQL语句涉及对象必须相同,比如表与同义词为不同对象。c)SQL语句必须使用相同名称的绑定变量;例1:SELECTCOLUMN1FROMTAB1WHERECOLUMN2=:1;selectCOLUMN1FROMtab1whereCOLUMN2=:1;以上两条SQL大小写不同,会进行两次硬解析。统一大小写,可减少硬解析。例2:SELECTCOLUMN1,COLUMN2FROMTAB1W

3、HERECOLUMN3=’AAA’;SELECTCOLUMN1,COLUMN2FROMTAB1WHERECOLUMN3=’AAa’;以上两条SQL未使用绑定变量,会进行两次硬解析。可改为绑定变量方式,减少硬解析:SELECTCOLUMN1,COLUMN2FROMTAB1WHERECOLUMN3=:1;例3:SELECTCOLUMN1FROMTAB1WHERECOLUMN2=:A;SELECTCOLUMN1FROMTAB1WHERECOLUMN2=:B;以上两条SQL未使用统一绑定变量名称,进行两次硬解析。可改

4、为统一名称,减少硬解析;5.尽量避免编写功能过于复杂、语句过于冗长的SQL,这样既增加了阅读、维护的难度,也很可能对SQL执行效率造成影响;对于业务过于复杂的功能,不必考虑只用一次SQL实现,可考虑分步查询、实现;6.在嵌套查询中,注意避免子查询的冗余、低效写法。如某SQL通过COUNT()函数计算某子查询结果集记录数,但子查询SELECT语句内含有多余的字符串处理函数、聚合函数,或对子查询进行了orderby排序等无实际意义操作。为避免干扰优化器的判断,建议清楚对最终结果无影响的SQL语句。具体规则根据讨论

5、的情况,主要SQL编写规则如下:1.杜绝未查看执行计划,将仅仅实现功能的SQL语句写入系统程序并发布生产;开发人员须结合Oracle执行计划辅助开发;2.杜绝出现SELECT*语句,须将字段名称一一写明;3.如WHERE条件中存在对某个表进行了多次子查询,须在逻辑不变的情况下,将多次子查询合并为一次子查询。示例如下:--低效写法SELECTCOLUMN1,COLUMN2FROMTAB1WHERECOLUMN3IN(SELECTCOLUMN3FROMTAB2)ANDCOLUMN4IN(SELECTCOLUMN4

6、FROMTAB2);--替代写法SELECTCOLUMN1,COLUMN2FROMTAB1WHERE(COLUMN3,COLUMN4)IN(SELECTCOLUMN3,COLUMN4FROMTAB2);4.GROUPBY语句中的HAVING条件,如非聚合函数,应尽量转换为等价WHERE条件;5.ORDERBY尽量以索引字段进行排序;6.如无业务需求,须用UNIONALL替代UNION;7.在业务逻辑等价,结果一致的前提下,用EXISTS/NOTEXISTS替代IN/NOTIN;8.表关联查询时,尽量先进行筛选

7、,再进行关联,从而减少关联后的整体数据量;9.涉及索引字段的SQL编写规则:a)对索引字段进行LIKE模糊查询时,首字母为百分号%,即类似’%AB13’的情况,索引无法使用。非必须时,尽量避免首字母为百分号;b)组合索引的第一列,如未出现在WHERE条件内,例如索引IX_TEST建立时为CREATEINDEXIX_TESTONT_TAB1(C1,C2,C3);但查询WHERE条件只包含对C2和C3的限定,将无法使用组合索引IX_TEST。须考虑调整组合索引列顺序,或增加索引;c)对索引字段进行NULL相关判断

8、,如COLUMN1ISNULL或COLUMN1ISNOTNULL,将无法使用索引。如逻辑允许,可改写为COLUMN1>’’或COLUMN1>0或其他等价写法;d)对索引列使用函数、运算,如UPPER(COLUMN1)=:1或COLUMN1

9、

10、’TEST’=:1或COLUMN1*100=:1,将无法使用索引。可将处理放在比较值端,即COLUMN1=UPPER(:1)或COLUMN1=:1

11、

12、’TEST

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

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

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