我在这两个数据库中的表中有超过百万条记录。 我试图找出表acros数据库中的数据。
SELECT COUNT(*) FROM DB1.MYTABLE WHERE SEQ_NO NOT IN(SELECT SEQ_NO FROM DB2.MYTABLE) AND FILENAME NOT LIKE '%{%'
and PT_TYPE NOT IN(15,24,268,284,285,286,12,17,9,290,214,73) AND STTS=1
查询耗时。有什么方法可以让它快速吗?
提前感谢您的帮助
答案 0 :(得分:2)
你真的是指不同的数据库吗?或者你的意思是不同的模式?您谈论的是不同的数据库,但语法似乎是在两个不同的模式中使用表,而不是两个不同的数据库。我没有看到任何对数据库链接的引用,如果有两个不同的数据库,但DB2.MYTABLE
可能是MYTABLE@DB2
的同义词。
如果您可以发布生成的查询计划,将会很有帮助。指出存在哪些索引以及每个谓词的选择性也是有用的。我的猜测是将查询修改为
SELECT count(*)
FROM schema1.mytable a
WHERE NOT EXISTS (
SELECT 1
FROM schema2.mytable b
WHERE a.seq_no = b.seq_no )
AND a.filename NOT LIKE '%{%'
AND a.pt_type NOT IN (15,24,268,284,285,286,12,17,9,290,214,73)
AND a.stts = 1
如果SCHEMA1.MYTABLE
中的大多数行被删除,可能会更有效,因为SEQ_NO
中存在SCHEMA2.MYTABLE
。