查询多个Oracle数据库性能问题

时间:2011-09-14 20:06:17

标签: oracle oracle10g

我在这两个数据库中的表中有超过百万条记录。 我试图找出表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

查询耗时。有什么方法可以让它快速吗?

提前感谢您的帮助

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