发现生产环境的Oracle数据库cpu使用率上升超过70%,其中一条查询语句达到每秒调用40多次。现在我们来观摩下该语句:

select t.id,t.level,t.policy, t.type,t1.point,t2.channel,t3.user from t_wlf_charge t, t_wlf_point t1, t_wlf_channel t2,

(select t4.id,t4.phone user from t_wlf_user t4 where t4.phone=?

union select t5.id,t5.city user from t_wlf_city t5 where t5.city=? or t5.city=0) t3

where t.id=t1.id and t.id=t2.id and t.id=t3.id and t.code=? and 

(t1.point=NVL(?,t1.point) or t1.point=0) and (t2.channel=? or t2.channel=0)

order by t.type asc

  开始考虑缓存,但发现关联查询缓存命中率是个问题,而且本身重复查询率就低。最后决定通过视图优化以上1主表+5从表的关联查询,先创建视图:

create or replace view v_wlf_charge as select 

t.id,t.level,t.policy, t.type,t.code,nvl(t1.point,0) point,nvl(t2.channel,0) channel, nvl(t3.phone,0) phone,nvl(t4.city,0) city from

t_wlf_charge t left join t_wlf_point t1 on t.id=t1.id

left join t_wlf_channel t2 on t.id=t2.id

left join t_wlf_phone t3 on t.id=t3.id

left join t_wlf_city t4 on t.id=t4.id

where t.id is not null 

  再用这条脚本查:

select id,level,policy, type,point,channel,phone as user from v_wlf_charge

where code=? and point in(0,?) and channel in (0,?) and phone in (0,?) and city in (0,?)

order by type asc

Oracle查询脚本优化的更多相关文章

  1. MYSQL 查询脚本优化

    业务需要,优化一段多表查询脚本. 总结下来,采取以下步骤. 分析语句 分析语句,了解逻辑,是否可以先优化逻辑. 查询语句的查询范围,是否是全表查询,如果是,尽量优化为按索引查询. 查看语句数量,是否有 ...

  2. Oracle 查询性能优化(转)

    原则一:注意WHERE子句中的连接顺序: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHER ...

  3. oracle查询性能优化

    原文http://www.cnblogs.com/cnjava/archive/2013/02/28/2937699.html 讲解的oracle数据库面对大数据如何优化查询.

  4. oracle查询SQL优化相当重要

    如果表中的时间字段是索引,那么时间字段不要使用函数,函数会使索引失效. 例如: select * from mytable where trunc(createtime)=trunc(sysdate) ...

  5. Oracle 查询性能优化实践

      1.索引使用原则   不要对索引使用全模糊,但是 LIKE 'asdf%'是可以的,即不要Contains,可用StartWith 不要对索引进行函数,表达式操作,或者使用is null判断,否则 ...

  6. Oracle的分页查询语句优化

    Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. (一)   分页查询格式: SELECT * FROM  ( SELECT A.*, ROWNUM RN  FROM (SELECT ...

  7. Oracle DBA 必须掌握的 查询脚本:

    Oracle  DBA 必须掌握的 查询脚本: 0:启动与关闭 orcle 数据库的启动与关闭 1:连接数据库 2:数据库开启状态的实现步骤:       2-1:启动数据库           2- ...

  8. 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)

    基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编   ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...

  9. 转://从一条巨慢SQL看基于Oracle的SQL优化

    http://mp.weixin.qq.com/s/DkIPwbDKIjH2FMN13GkT4w 本次分享的内容是基于Oracle的SQL优化,以一条巨慢的SQL为例,从快速解读SQL执行计划.如何从 ...

随机推荐

  1. Mybatis plus 高级

    最近项目重构 dao层使用的Mybatis plus,有必要总结下. Mybatis plus 会自动维护Mybatis 以及 MyBatis-Spring 相关依赖  所以在构建项目时候 只需要引入 ...

  2. Extracting info from VCF files

    R, Bioconductor filterVcf: Extract Variants of Interest from a Large VCF File (Paul Shannon) We demo ...

  3. struts2——上传图片格式

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  4. 使用Mybatis时报错Invalid bound statement (not found):

    使用逆向工程时生成的.xml文件在conf目录下,而使用查询方法时,无法在dao包下找到xml文件,所以报错. 测试代码如下所示: @Test public void testSimple() thr ...

  5. EditText实现输入表情

    EditText实现输入表情 一.简介 editText是TextView的子类,TextView能用的工具EditText都能用,这里就是editText利用SpannableString的Imag ...

  6. ctci1.1

    )         ;     ; i < len; i++){         if(place.find(str[i]) == place.end())             place. ...

  7. Prism技术开发文档(五星级)

    转自csdn博客园:http://blog.csdn.net/albert528108/article/details/52122547

  8. [java插件]myeclipse添加插件

    在C:\Program Files\MyEclipse 6.0\eclipse\links里建立一个svn.link. svn.link文件内容: path=C:/Program Files/MyEc ...

  9. Eclipse中Preference打开后找不到Server项解决方案。

    该解决方案是假设你已经安装好了JDK,tomcat,eclipse,突然在Eclipse的配置时找不到选择菜单栏中的window——preferences-server——runtime enviro ...

  10. 【Python】词典

    词典 (dictionary).与列表相似,词典也可以储存多个元素.这种储存多个元素的对象称为容器(container) 基本概念 常见的创建词典的方法: >>>dic = {'to ...