【问题标题】:merge query running very slow合并查询运行很慢
【发布时间】:2013-11-27 11:48:57
【问题描述】:

我正在使用 Oracle DB 并尝试使用 spring jdbc Temple 发出合并查询。

oracle查询示例如下

 MERGE INTO table_name  b
     USING (select 'id','fid','somedata' from DUAL a
     ON (a.id = b.id and a.fid = b.id)
    WHEN MATCHED THEN
     UPDATE SET col_name = 'some_val' where  lastUpdateTime > someTime
    WHEN NOT MATCHED THEN
     INSERT (id,fid col_name)
     VALUES ('id','fid', 'some_val')

此查询之前运行正常,但现在运行速度非常慢(以分钟计)

表格详情:
id,fid 作为复合主键
在记录创建日期进行分区。
表中的记录数约为 1500 万

为什么查询性能这么慢?

【问题讨论】:

  • 对在非 PK 列上分区的索引支持的 PK 感兴趣。没想到这是可能的——你确定吗?
  • @David Aldridge 您可以在没有 pk 列的情况下对表进行分区
  • 是的,但我读它的意思是索引本身是分区的。
  • 您是否运行过 Oracle 基于成本的优化器 (CBO)?如果没有,您可以在运行查询之前尝试运行它。它提供 11g 及更高版本。

标签: sql oracle merge


【解决方案1】:

当它运行几分钟时,您应该使用

找到解释
select * from v$session_longops where time_remaining > 0

【讨论】:

    猜你喜欢
    • 2017-03-17
    • 1970-01-01
    • 2018-01-23
    • 2014-01-21
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多