一个网友说他的存储过程中有一段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 优化的更多相关文章
-
由一次 UPDATE 过慢 SQL 优化而总结出的经验
最近,线上的 ETL 数据归档 SQL 发生了点问题,有一个 UPDATE SQL 跑了两天还没跑出来: update t_order_record set archive_id = '420a7fe ...
-
sql 优化
1.选择最有效率的表名顺序(只在基于规则的优化器中有效): oracle的解析器按照从右到左的顺序处理 from 子句中的表名,from子句中写在最后的表(基础表driving table)将被最先处 ...
-
SQL 优化总结
SQL 优化总结 (一)SQL Server 关键的内置表.视图 1. sysobjects SELECT name as '函数名称',xtype as XType FROM s ...
-
(转)SQL 优化原则
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...
-
SQL优化技巧
我们开发的大部分软件,其基本业务流程都是:采集数据→将数据存储到数据库中→根据业务需求查询相应数据→对数据进行处理→传给前台展示.对整个流程进行分析,可以发现软件大部分的操作时间消耗都花在了数据库相关 ...
-
提高SQL查询效率(SQL优化)
要提高SQL查询效率where语句条件的先后次序应如何写 http://blog.csdn.net/sforiz/article/details/5345359 我们要做到不但会写SQL,还要做到 ...
-
Oracle的update语句优化研究
最近研究sql优化,以下文章转自互联网: 1. 语法 单表:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 如:update t_join_situation s ...
-
sql优化建议
背景: 在北京工作期间,我们做应用开发的和后台数据库的联系非常大,我们经常在一起讨论存储过程或者是sql性能优化的事情来降低应用运行时的时间,提高性能,经过和数据库方面的工程师的一些讨论 ...
-
oracle sql优化
整理一下网上所看到sql优化方法 1.使用大写字母书写sql,因为oracle解释器会先将sql语句转换成大写后再解释 2 减少访问数据库的次数,多数情况下一条sql可以达到目的的,就不要使用多 ...
随机推荐
-
【.net 深呼吸】细说CodeDom(1):结构大观
CodeDom 是啥东东?Html Dom听过吧,XML Dom听过吧.DOM一般可翻译为 文档对象模型,那 Code + DOM呢,自然是指代码文档模型了.如果你从来没接触过 CodeDom,你大概 ...
-
Dexpress 中 grid的使用
grid 中加入checkbox Run desiger Columns ColumnEdit中选择checkbox 此时我们要在后台手动指定一个数据列如下代码: dtRebatesReport.Co ...
-
Tomcat部署web项目
在Myeclipse中,我们很容易做到这一步:把一个web项目生成war文件 其实在eclipse中,实现这样的功能,也是很简单的. 下面就看一下是怎样操作的吧! 新建一个web项目: 取名为:ecl ...
-
qt qml 刮刮卡效果
用canvas+mouseArea实现的刮刮卡效果. 表层是一层色彩,用手指划开,可看到下面的文字Lisence: MIT, 请保留本文档说明Author: surfsky.cnblogs.com 2 ...
-
mysql数据库性能篇
慢查询:超过设定时间的SQL语句会被记录到指定文件内 1.观察mysql慢查询默认的时间(默认10秒) show variables like 'long%'; 2.修改慢查询设定时间 set lon ...
-
C#Light for Unity 新例子
近来有好几位询问C#Lite在Unity中使用的问题 我专门为C#Lite制作了 for Unity的新例子 ,这个例子名为languagetest 包含17个语言特性测试的文件 其中_6004_展示 ...
-
Hadoop Hive与Hbase关系 整合
用hbase做数据库,但因为hbase没有类sql查询方式,所以操作和计算数据很不方便,于是整合hive,让hive支撑在hbase数据库层面 的 hql查询.hive也即 做数据仓库 1. 基于Ha ...
-
RAC OCR盘故障导致的集群重启恢复
一.事故说明 最近出现了一次OCR盘的故障导致Oracle集群件宕机的事故,后以独占模式启动集群,并使用ocr备份恢复了OCR文件以及重新设置了vote disk,然后关闭集群,重启成功. 因此在此处 ...
-
[P2921][USACO08DEC]在农场万圣节Trick or Treat on the Farm (记忆化搜索/DP?,Tarjan?)
第一看还以为是水题 随便打了一个bfs只有40分…… 然后开始颓废 #include<bits/stdc++.h> #define N 100005 using namespace std ...
-
每一行代码都有记录—如何用git一步步探索项目的历史
每一行代码都有一块被隐藏了的文档信息. 下面的代码片段不管是谁写的,其第4行因为某些原因要访问一个DOM结点的clientLeft属性,但却对结果不作任何处理.这十分的莫名其妙,你能告诉我他们为什么要 ...