大家好,最近在使用 OceanBase Oracle 模式做数据同步时遇到一个问题。
目前有两张表需要关联更新,数据量大概几百万到上千万。现在使用 MERGE INTO 根据 dbid + username 更新目标表:
MERGE INTO privilege_audit p
USING (
SELECT
dbid,
username,
MAX(systemid) AS systemid
FROM db_connection_log
GROUP BY dbid, username
) t
ON (
p.dbid = t.dbid
AND p.username = t.username
)
WHEN MATCHED THEN
UPDATE SET p.systemid = t.systemid;
单独执行查询感觉还可以,但是实际执行 MERGE 时耗时比较长,有时候还会遇到 SQL 超时。
目前目标表 (dbid, username) 已经建立索引。
想请教一下:
- OceanBase Oracle 模式下,
MERGE INTO大数据量更新有没有比较推荐的优化方式? -
USING子查询中的GROUP BY是否可能成为主要性能瓶颈? - 是否建议提前将
USING查询结果落到临时表,再进行MERGE? - 有没有必要通过
EXPLAIN/EXPLAIN EXTENDED查看具体执行计划?
OceanBase 版本是 4.x,Oracle 模式。
如果有类似场景的优化经验,麻烦大家指点一下,谢谢。