我有一个将 40 多个相同结构的数据库合并到一个统一数据库的过程,唯一的区别是统一数据库向每个表添加了一个 project_id 字段。
为了尽可能高效,如果添加/更改了记录,我将尝试仅将记录从源数据库复制/更新到统一数据库。我从统一数据库中删除过时的记录,然后复制任何不存在的记录。要删除过时/更改的记录,我正在使用与此类似的查询:
DELETE FROM <table>
WHERE NOT EXISTS (SELECT <primary keys>
FROM <source> b
WHERE ((<b.fields = a.fields>) or
(b.fields is null and a.fields is null)))
AND PROJECT_ID = <project_id>
这在大多数情况下都有效,但源数据库中的一个表有超过 700,000 条记录,并且此查询需要一个多小时才能完成。
如何让这个查询更有效率?