一个网友说他的存储过程中有一段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. 【HDOJ】1042 N!

    肯定是大叔,本来以为用加法做乘法,后来想想这样麻烦,还是可以使用乘法的,按位乘,ov可以看成不止一位,程序如下所示: #include <stdio.h> #define MAX 4000 ...

  2. Oracle系列之异常处理

    涉及到表的处理请参看原表结构与数据  Oracle建表插数据等等 使用select into语句读取tb_Employee的一行,使用异常处理处理no_data_found和two_many_rows ...

  3. 在Sublime Text 3中配置编译和运行C++程序

    下载解压MinGW至目标目录,本次安装的解压目录为C:\MinGW 设置环境变量.右击我的电脑,属性-->高级-->环境变量. 在系统环境变量PATH里添加C:\MinGW\bin(如果里 ...

  4. 【转】ubuntu 12.04英文版设置成中文版

    原文网址:http://blog.csdn.net/hhbgk/article/details/7958776 适用于ubuntu 12.04英文版的系统,其它版本的设置应该是大同小异的. 进入ubu ...

  5. 兼容ie\firefox\chrome的cursor

    cursor:hand 与 cursor:pointer 的效果是一样,都像手形光标. 但用FireFox浏览时才注意到使用cursor:hand在FireFox.chorme里并被支持.cursor ...

  6. 在 ASP.NET MVC 中使用 HTTPS (SSL/TLS)

    某些安全性较高的网页,如网上支付或用户登陆页面,可能会使用到https(SSL/TLS)来提高安全性.本文介绍了如何在ASP.NET MVC中强制某action使用https和如何进行向https页面 ...

  7. BrnShop开源网上商城第三讲:插件的工作机制

    这几天BrnShop的开发工作比较多,所以这一篇文章来的晚了一些,还请大家见谅呀!还有通知大家一下BrnShop1.0.312版本已经发布,此版本添加了报表统计等新功能,需要源码的园友可以点此下载.好 ...

  8. (转载)完美解决PHP中文乱码问题

    (转载)http://www.souzz.net/html/edu/php/php1/74181.html 一.首先是PHP网页的编码 1.php文件本身的编码与网页的编码应匹配 a.如果欲使用gb2 ...

  9. Cocos2d-x ios 下http请求的另一种实现

    简单描述下需求:游戏要加入事件log,比如玩家升到10级:创建角色:或是,触发这些事件后要求客户端忘后台抛送一条log信息.一般情况下,我们可以直接使用cocos自带的HttpClient(底层用li ...

  10. [codevs1287]矩阵乘法

    题目描述 Description 小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容.当然,小明上课打瞌睡也没问题,但线性代数的习题可是很可怕的.小明希 ...