在找到两个表之间的差异时,SQL联合所有性能

时间:2013-11-28 20:21:13

标签: sql performance db2 compare union-all

我正在尝试比较两个数据库并从文件中提取行,这两个文件中存在的单个文件存在任何差异。这两个文件的列数可能不同,但它们的关键字段相同。

首先,我找到两者共有的文件名,两者共有的字段和两者共有的关键字段。

以下是我用于比较LIB1和LIB2中的示例文件XXPF以及4个公共字段XXFLD1 - 4的SQL。

INSERT INTO COMPARE.XXPF 
SELECT MIN(file) AS file,XXFLD1, XXFLD2, XXFLD3, XXFLD4 
FROM (  SELECT 'LIB1' AS file, XXFLD1, XXFLD2, XXFLD3, XXFLD4 FROM LIB1.XXPF A  
        UNION ALL  
        SELECT 'LIB2' AS file, XXFLD1, XXFLD2, XXFLD3, XXFLD4 FROM LIB2.XXPF B  ) tmp
GROUP BY XXFLD1, XXFLD2, XXFLD3, XXFLD4
HAVING COUNT(*) = 1

这样可以正常工作,但对于包含更多字段和数十万或数百万条记录的大型文件来说,速度非常慢。我可以从视觉解释中看到它正在对两个文件进行全表扫描,创建另一个表,然后从那里进行选择。

现在考虑我知道XXFLD1和XXFLD2是这两个文件的关键是否有更好的结构可以更有效地获得相同的结果?对于给定的键值,这是两个库之间不同的行(或只是字段)。我在IBM i上使用DB2

感谢您的任何建议。

0 个答案:

没有答案