一个网友说他的存储过程中有一段update sql,运行了15分钟还没出结果,需要优化一下

他把sql发给我

UPDATE TB_RESULT R SET R.VOTE_COUNT=NVL((
SELECT TEMP_.VOTE_COUNT
FROM (
SELECT RESULT_ID,
COUNT(RV_ID) AS VOTE_COUNT
FROM TB_RESULT_VOTE
GROUP BY RESULT_ID
) TEMP_
WHERE TEMP_.RESULT_ID = R.RESULT_ID),
R.VOTE_COUNT
);

看了这个update sql,把他拆成两个部分,红颜色的部分是优化的关键

SELECT TEMP_.VOTE_COUNT
FROM (
SELECT RESULT_ID,
COUNT(RV_ID) AS VOTE_COUNT
FROM TB_RESULT_VOTE
GROUP BY RESULT_ID
) TEMP_
WHERE TEMP_.RESULT_ID = R.RESULT_ID

这是一个很简单的sql,如果有问题基本上出现在from后的子查询中

而且很有意思这个自查询中的表没有筛选条件,就相当于全表扫描

他说这个表TB_RESULT_VOTE有90w

我让他发一下执行计划,发现全都是NL,执行计划是错的

这个sql的优化思路就是TB_RESULT与temp表要走hash 连接,temp表既然是全表扫描,需要固化并且要并行加载提高速度

这样就需要改写sql

with temp_ as (select /*+ materialize parallel(tb_result_vote,6) */result_id,count(rv_id) as vote_count from tb_result_vote group by result_id)
select /*+ use_hash(temp_,r)*/temp_.vote_count
from temp_,tb_result r
where temp_.result_id=r.result_id;

我让他运行这个sql,不到1s就出结果了

我的qq是343548233,希望和大家一起交流sql的优化,以及oracle方面的东西

UPDATE sql 优化的更多相关文章

  1. 由一次 UPDATE 过慢 SQL 优化而总结出的经验

    最近,线上的 ETL 数据归档 SQL 发生了点问题,有一个 UPDATE SQL 跑了两天还没跑出来: update t_order_record set archive_id = '420a7fe ...

  2. sql 优化

    1.选择最有效率的表名顺序(只在基于规则的优化器中有效): oracle的解析器按照从右到左的顺序处理 from 子句中的表名,from子句中写在最后的表(基础表driving table)将被最先处 ...

  3. SQL 优化总结

    SQL 优化总结 (一)SQL Server 关键的内置表.视图 1. sysobjects         SELECT name as '函数名称',xtype as XType  FROM  s ...

  4. (转)SQL 优化原则

    一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...

  5. SQL优化技巧

    我们开发的大部分软件,其基本业务流程都是:采集数据→将数据存储到数据库中→根据业务需求查询相应数据→对数据进行处理→传给前台展示.对整个流程进行分析,可以发现软件大部分的操作时间消耗都花在了数据库相关 ...

  6. 提高SQL查询效率(SQL优化)

    要提高SQL查询效率where语句条件的先后次序应如何写 http://blog.csdn.net/sforiz/article/details/5345359   我们要做到不但会写SQL,还要做到 ...

  7. Oracle的update语句优化研究

    最近研究sql优化,以下文章转自互联网: 1.     语法 单表:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 如:update t_join_situation s ...

  8. sql优化建议

    背景:        在北京工作期间,我们做应用开发的和后台数据库的联系非常大,我们经常在一起讨论存储过程或者是sql性能优化的事情来降低应用运行时的时间,提高性能,经过和数据库方面的工程师的一些讨论 ...

  9. oracle sql优化

    整理一下网上所看到sql优化方法 1.使用大写字母书写sql,因为oracle解释器会先将sql语句转换成大写后再解释 2    减少访问数据库的次数,多数情况下一条sql可以达到目的的,就不要使用多 ...

随机推荐

  1. push本地代码到github出错

    $ git push -u origin masterTo git@github.com:******/Demo.git ! [rejected] master -> master (non-f ...

  2. C# zip压缩

    /**//* * Gary Zhang -- cbcye@live.com * www.cbcye.com * www.quicklearn.cn * cbcye.cnblogs.com */ usi ...

  3. URAL1009

    链接 第一道URAL题 简单递推 #include <iostream> #include<cstdio> #include<cstring> #include&l ...

  4. vim解决中文显示乱码问题

    命令:vim ~/.vimrc 写入如下: set enc=utf-8 set fileencoding=utf-8 set fileencodings=ucs-bom,utf8,prc set gu ...

  5. jquery ajax cache的问题

    function test()        {            $.ajax({                type:'GET',                url:"tt. ...

  6. eclipse代码格式化

    今天想要改变Eclipse的代码颜色和背景等等,如果一项一项来,太麻烦了,于是从网上找了个epf文件,但是一开始不知道怎么弄,因为自己是个新手, 对于编译环境不太熟悉,后来找到方法,就是打开Eclip ...

  7. WPF——文本随滚动条改变而改变

    一.造一个窗体,拖进一个文本框TextBox和滚动条Slider 二.让文本框的内容随滚动条的滚动而改变,即文本框绑定到滚动条上 三.实现效果

  8. Webform和MVC,为什么MVC更好一些?

    前言 如果你看了最近微软的议程,你会发现他们现在的焦点除了MVC,还是MVC.问题在于为什么微软如此热衷于丢弃传统的APS.NET Webform而转向ASP.NET MVC?本文就主要来讨论这个问题 ...

  9. javascript中的 && 与 || 的运用

    a && b : 将a, b转换为Boolean类型, 再执行逻辑与, true返回b, false返回a a || b : 将a, b转换为Boolean类型, 再执行逻辑或, tr ...

  10. Android ViewPager多页面滑动切换以及动画效果

    一.首先,我们来看一下效果图,这是新浪微博的Tab滑动效果.我们可以手势滑动,也可以点击上面的头标进行切换.与此同方式,白色横条会移动到相应的页卡头标下.这是一个动画效果,白条是缓慢滑动过去的.好了, ...