【发布时间】: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 及更高版本。