我对子查询的性能/加入另一个表有一个小问题
INSERT
INTO Original.Person
(
PID, Name, Surname, SID
)
(
SELECT ma.PID_new , TBL.Name , ma.Surname, TBL.SID
FROM Copy.Person TBL , original.MATabelle MA
WHERE TBL.PID = p_PID_old
AND TBL.PID = MA.PID_old
);
Run Code Online (Sandbox Code Playgroud)
这是我的SQL,现在这个东西运行大约100万次或更多.我的问题是什么会更快?
TBL.SID
改为(Select new from helptable where old = tbl.sid
) 要么
from
并且加入where
?edit1
嗯,这个脚本的运行次数和r个人一样多.
我的程序有2个模块,一个填充MaTabelle
,一个传输数据.该程序确实将2个数据库合并在一起,因此有时会使用相同的密钥.
现在我正在研究一种没有重复密钥存在的解决方案.
我的解决方案是制作一个'HelpTable'.key(SID
)的所有者生成一个新密钥并将其写入"HelpTable".使用此密钥的所有其他表都可以从"HelpTable"中读取它.
edit2
刚想到的东西:
如果一个表作为一个可以为null的键(外键没有链接)那么这将无法使用from或?
现代RDBM(包括Oracle)将大多数联接和子查询优化为同一个执行计划.
因此,我会继续以最简单的方式编写查询,并专注于确保您已完全优化索引.
如果您提供最终查询和数据库架构,我们可能会提供详细的建议,包括有关潜在锁定问题的信息.
编辑
以下是适用于您的查询的一些常规提示: