Запрос о производительности нескольких баз данных Oracle - PullRequest
2 голосов
/ 15 сентября 2011

У меня есть более миллиона записей в этих таблицах в обеих базах данных. Я пытаюсь выяснить данные в обеих таблицах баз данных 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 Ответ

2 голосов
/ 15 сентября 2011

Вы действительно имеете в виду разные базы данных? Или вы имеете в виду разные схемы? Вы говорите о разных базах данных, но синтаксис использует таблицы в двух разных схемах, а не в двух разных базах. Я не вижу ссылок на ссылку на базу данных, которая была бы необходима, если бы существовали две разные базы данных, но, возможно, 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...