开发者社区> 问答> 正文

oracle update 性能问题求解:报错

 MERGE INTO t_biz_storesalestock t
            USING tmp_purchase_receive_interface p
            ON (p.store = t.orgid AND t.productid = p.material)
            WHEN MATCHED THEN
              UPDATE
                 SET t.receivedate = p.receivedate
               where t.saleinventorydate = pdate_date
                 and t.orgid = c_row.orgid
                 and p.receivedate is not null;

如上一条SQL,用于 根据另一个表更新主表,可是慢的简直无法让人忍受。还不如我把 t 表中要更的记录和 p 表关联起来插入临时表,然后把 t 表中相应记录删除,在把临时表中数据插回来快。这是为什么呢?按说这样做加起来都做了3个增删1个查询加起来4个操作了,应该更慢啊,可现在反而比我上面的这个简单的更新快的多。

请 @宏哥 指点。其实我的需求很简单的,写成简单的SQL就是:


update t_biz_storesalestock t
   set t.receivedate =
       (select p.receivedate
          from tmp_purchase_receive_interface p
         where p.store = t.orgid
           AND t.productid = p.material
           and p.receivedate is not null)
 where t.saleinventorydate = pdate_date
   and t.orgid = c_row.orgid;

这样写而已。可是无论我怎么写,它还是慢啊,我现在要它快点啊。。


@宏哥 怎么老at不到啊。


展开
收起
kun坤 2020-06-09 23:06:28 511 0
1 条回答
写回答
取消 提交回答
  • 这得看数据量了,几十万以下,加个索引就可以搞定了。几十百万以上的话,无论是update还是delete都是不推荐的,一般用ctas建临时表,再将原本未更新的数据补进临时表,删除原表,把临时表改名为原表名。

    ######看一下执行计划,是不是没走索引######哈,谢谢回答,是那个来源表里没索引,我已经加了,现在很快就能执行完,嘿嘿,不过你回答的晚了。我已经设置了最佳答案咯。###### @宏哥 知道这大龄屌丝数据库方面很就X,怎么就是在上面提问里面@不到呢,继续 @宏哥 一下。
    ######

    你这语句能执行?

    c_row哪来的

    pdate_date是哪来的

    还有就是没有执行计划没办法分析的



    ######

    引用来自“IdleMan”的答案

    你这语句能执行?

    c_row哪来的

    pdate_date是哪来的

    还有就是没有执行计划没办法分析的



    这2个你就可以当常量吧,因为这个是从存储过程里面直接copy过来的,但逻辑就是这样的没变。。
    ######is not null? 建议看一下解释计划######

    引用来自“JackyYeong”的答案

    is not null? 建议看一下解释计划
    上面一个用这是,是因为我觉得这么些2个表应该是全连接,而实际是要更新的表 a 的每一行记录并不能在数据源表 b 中对应到数据,让我不想因为对应不到而把 a 中的更新成null,所以才这么写。第二个语句本身是不需要在这儿这么判断的,为了达到和第一个一样的目的,应该在where后面exists前面的更新条件,这样更慢,对吧?
    ######

    为什么你不拆开来分析一下到底是哪个条件导致这么慢?

    建议你把中间select语句的执行计划拿出来看一下~还有表的结构跟表大小~

    2020-06-10 09:34:58
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_樊文凯_ORACLE数据库和应用异构迁移最佳实践 立即下载
PostgresChina2018_王帅_从Oracle到PostgreSQL的数据迁移 立即下载
Oracle云上最佳实践 立即下载

相关实验场景

更多

相关镜像