- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Oracle语法效率优化应注意的若干细节
一、 尽量避免对列的操作
任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据 库函数、计算表达式等等,查询时要尽可能将操作移至等式的右边, 甚至去掉函数。
例:下列SQL条件语句中的列都建有恰当的索引,但30万行数据情 况下执行速度却非常慢:
select * from record where substrb(CardNo, 1, 4)=,5378,
select * from record where amount/30 1000
select * from record
where to_char(ActionTime, yyyymmdd,)二1999120T
于where子句中对列的任何操作结果都是在SQL运行时逐行计算 得到的,因此它不得不进行表扫描,而没有使用该列上面的索引;如 果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化, 使用索引,避免表扫描,因此可将SQL修改如下:
select * from record where CardNo like 5378%
select * from record where amount 1000*30
select * from record
where ActionTime= to date ‘yyyymmdd)
二、 避免不必要的类型转换
尽量避免潜在的数据类烈转换。如将字符烈数据与数值型数据比 较,ORACLE会自动将字符型用to_number ()函数进行转换,从而导致 全表扫描。
例:表tabl中的列coll是字符型(char),则以下语旬存在类型转 换:
select col 1,col2 from tabl where coll10
应该写为: select coll, col2 from tabl where coll〉10‘
三、增加查询的范围限制
增加查询的范围限制,避免全范围的搜索。
例:以卜查询表record中时间ActionTime小于2015年5月1日的数据:
select * from record
where ActionTime to date ‘yyyymm)
查询计划表明,上面的查询对表进行全表扫描,如果我们知道表 屮的最早的数据为2011年1月1日,那么,可以增加一个最小时间,使 查询在一个完整的范围之内。
修改女口下: select * from record where
ActionTime to date ‘yyyymm)
and ActionTime to_date ‘yyyymm)
此SQL语句将利用ActionTime字段上的索引,从而提高查询效率。 同理,对于大于某个值的查询,如果知道当前可能的最大值,也可以 在Where子句中加上“AND列名〈MAX(最大值)”。
四、尽量去掉〃IN〃、〃0R〃
含有〃IN〃、〃0R〃的Where子句常会使用工作表,使索引失效;如果 不产生大量重复值,可以考虑把子句拆开;拆开的子句中应该包含索 引。
例4: select count (*) from stuff where i d_no
(23 秒)
可以考虑将or子句分开:
select count (*) from stuff where id_no二O
select count (*) from stuff where id_no二T
然后再做一个简单的加法,与原来的SQL语句相比,查询速度更快。
五、尽量去掉
尽量去掉〃?〃,避免全表扫描,如果数据是枚举值,且取值范围 固定,则修改为〃0R〃方式。
例:
UPDATE SERVTCETNFO SET STATE^O WHERE STATEOO;
以上语句由于其中包含了执行计划中用了全表扫描(TABLE ACCESS FULL),没有用到state字段上的索引。实际应用中,市于业 务逻辑的限制,字段state为枚举值,只能等于0, 1或2,而且,值等 于二1, 2的很少,因此可以去掉〃?勺利用索引来提高效率。
修改为:UPDATE SERVTCETNFO SET STATEN WHERE STATE 二 1 OR
STATE二2 o进一步的修改可以参考第4种方法。
六、 去掉Where了句中的IS NULL和IS NOT NULL
Where字句中的IS NULL和IS NOT NULL将不会使用索引而是进行全 表搜索,因此需要通过改变查询方式,分情况讨论等方法,去掉Where 子句中的IS NULL和IS NOT NULL。
七、 索引提高数据分布不均匀时查询效率
索引的选择性低,但数据的值分布差异很大时,仍然可以利用索 引提
您可能关注的文档
- LED节能灯的发展概况.docx
- LED节能灯电源开题报告.docx
- LED芯片制造常用单词.docx
- LessonTwoTheGameoftheName高英5,第二单元,课后答案.docx
- LinuxFastDFS安装文档计算机软件及应用IT计算机专业资料.docx
- LinuxFTP服务器搭建和crontab计划任务制定.docx
- Linuxrhel53无盘工作站搭建.docx
- Linux操作系统实验指导手册.docx
- Linux常用命令总结以及举例.docx
- Linux程序安装实验报告.docx
- 2012-2021北京重点校高一(下)期中语文汇编:词类活用.pdf
- 电力市场与经济运行优化:电力市场优化算法_(28).电力市场中的市场力分析.docx
- 医院培训课件:《俯卧位通气的护理》.pptx
- 电力市场与经济运行优化:电力系统能效优化方法_(1).电力市场基础理论.docx
- 电力市场与经济运行优化:电力系统能效优化方法_(9).电力系统运行与能效优化.docx
- 电力市场与经济运行优化:电力系统能效优化方法_(15).电力市场与环境影响分析.docx
- 电力市场与经济运行优化:电力系统优化调度_(1).电力市场基础与原理.docx
- 电力市场与经济运行优化:电力系统优化调度_(14).电力市场改革政策与影响.docx
- 电力市场与经济运行优化:电力系统运行优化_(4).电力系统运行基础.docx
- 2025年航运行业分析.docx
最近下载
- 2025.10自考-《马克思主义基本原理概论》真题及答案 .pdf VIP
- 33、现浇箱涵施工方案.docx VIP
- 2025年全国10月自考马克思主义基本原理概论真题及答案解析.doc VIP
- 5.高项项目范围管理案例分析:范围定义案例.pptx VIP
- 城市雕塑创作设计收费标准·2020版.docx VIP
- 某一级公路边坡稳定性分析评价及治理方案研究.pdf VIP
- 2019部编版小学《道德与法治》五年级上册《美丽文字 民族瑰宝》课件3..ppt VIP
- 新22S2 给水工程建筑图集.docx VIP
- 《海军概况》网课章节测试题答案.docx VIP
- 中国移动铁通公司招聘考试试卷及答案.docx VIP
文档评论(0)