采用merge语句的非关联形式再次显神能

简介:   采用merge语句的非关联形式再次显神能 题记:采用merge语句的非关联形式确实可以提高update语句的性能,尤其对于百万级别的数据量,之前的一个关于merge语句的优化案例请参考: http://blog.

 


采用merge语句的非关联形式再次显神能


题记:采用merge语句的非关联形式确实可以提高update语句的性能,尤其对于百万级别的数据量,之前的一个关于merge语句的优化案例请参考:

http://blog.itpub.net/26736162/viewspace-1218671/



 

今天发现一个update的更新sql语句跑了1天多的时间了,又是单纯的update语句,作为优化工作的我对这种事情肯定不能忍受的,看官请看图:

select a.SQL_ID,a.SQL_TEXT,a.ELAPSED_TIME2,a.SESSION_TYPES from XB_SQL_MONITOR_LHR a where a.SQL_ID='aaqkudujcm4jp';

 

其执行计划:

 

执行计划的cost花费有点大哟,,,,

 

原sql语句:

 

UPDATE zhui_car_ins_140717_v2 a

SET a.date_of_open =

(SELECT b.date_opened

FROM riskdw.mid_acct_sum b

WHERE a.party_no = b.party_no);

 

O()︿︶)o 唉,,,,,,这什么垃圾sql呢?????连个where子句都没有。。。。。。。,然后发现有全表扫描,看了下sql里边设计到非索引列,根据业务,非索引列经常随着索引列出现,那么就建立联合索引咯。。。。。,,,,然后再修改为merge语句来更新表:

create index ind_mid_acct_partyno on riskdw.mid_acct_sum(party_no,DATE_OPENED) PARALLEL 20 NOLOGGING;

alter index ind_mid_acct_partyno NOPARALLEL;

 

 

先修改为merge语句的关联形式看看情况:


发现cost花费依然有点高,好吧再优化优化,然后再修改为merge语句的非关联形式来更新表:

 

再次执行:

MERGE INTO RISKPUBZCZH.zhui_car_ins_140717_v2 t

USING (SELECT a.rowid AS rowids,

b.date_opened date_opened

FROM riskdw.mid_acct_sum b,

RISKPUBZCZH.zhui_car_ins_140717_v2 a

WHERE a.party_no = b.party_no ) t1

ON (t.rowid = t1.rowids)

WHEN MATCHED THEN

UPDATE SET t.date_of_open = t1.date_opened;

COMMIT;

发现报错:

看来有非唯一行,这个是merge语句经常出现的问题,那么修改一下如下:

 

 

 

最终优化后的sql:

MERGE INTO RISKPUBZCZH.zhui_car_ins_140717_v2 t

USING (SELECT a.rowid AS rowids,

MAX(b.date_opened) date_opened

FROM riskdw.mid_acct_sum b,

RISKPUBZCZH.zhui_car_ins_140717_v2 a

WHERE a.party_no = b.party_no

             group by A.ROWID ) t1

ON (t.rowid = t1.rowids)

WHEN MATCHED THEN

UPDATE SET t.date_of_open = t1.date_opened;

COMMIT;

 

优化后的执行计划:

 

跑一下呢?

 

 

尼玛,,,,,这么快,,,,,又是自行车到宇宙飞船的速度的转变呀。。。。。。。

 

 

结尾: 有关merge语句的非关联形式的sql优化 小麦苗(我的网名)就给大家列举这2个例子,大家有什么不懂的可以给我留言,或者加我QQ(642808185)也行。

目录
相关文章
|
Python
使用`merge`函数将两个dataframe合并在一起,然后使用`query`函数根据指定的条件选取数据
在pandas中,可以使用`merge`函数将两个dataframe合并在一起,然后使用`query`函数根据指定的条件选取数据。
133 1
|
5月前
|
SQL 数据处理 数据库
DELETE 和 TRUNCATE 语句之间的详细区别
【8月更文挑战第31天】
764 0
|
7月前
|
关系型数据库 MySQL PHP
【thinkphp知识】thinkphp 使用union链式操作合并两个或多个 SELECT 语句的结果集,新增不存在的字段,并赋予默认值
【thinkphp知识】thinkphp 使用union链式操作合并两个或多个 SELECT 语句的结果集,新增不存在的字段,并赋予默认值
94 0
|
8月前
|
程序员 Python
if语句的一般形式
if语句的一般形式
74 0
|
JSON 程序员 数据格式
优雅地处理Python中的条件分支:字典映射、函数组合与match-case语句
在本文中,我们探讨了如何在Python中优雅地处理条件分支,以避免使用过多的if语句。文章介绍了两种解决方案:字典映射与函数组合以及Python 3.10中引入的match-case语句。这些方法使得代码结构更加清晰、简洁且易于维护和扩展。
136 0
|
SQL 关系型数据库 MySQL
操作delete或者update语句,加个limit或者循环分批次删除
操作delete或者update语句,加个limit或者循环分批次删除
Zp
|
SQL
在写左关联时SQL语句出现 Duplicate column name 'NAME'名字重复错误解决方法
在写左关联时SQL语句出现 Duplicate column name 'NAME'名字重复错误解决方法
Zp
521 0
witch语句中,x可以是哪些类型的数据
witch语句中,x可以是哪些类型的数据
witch语句中,x可以是哪些类型的数据
|
SQL 数据挖掘 数据库
DataFrame多表合并拼接函数concat、merge参数详解+代码操作展示
DataFrame多表合并拼接函数concat、merge参数详解+代码操作展示
880 0
DataFrame多表合并拼接函数concat、merge参数详解+代码操作展示
|
SQL 关系型数据库 MySQL
十一、操作delete或者update语句,加个limit或者循环分批次删除
十一、操作delete或者update语句,加个limit或者循环分批次删除
355 0

热门文章

最新文章