Рейтинг:
7
Wendelius
Что касается отдельной проблемы, то если у вас много строк и вам нужно найти не дубликаты на основе нескольких столбцов, это потребует времени и ресурсов. Если избирательность высока, то правильная индексация принесет вам пользу, но если запрос извлекает, скажем, более 10% строк в таблице, то индексация не является жизнеспособным вариантом.
Судя по синтаксису, я так понимаю, что это Оракул? Если это так, то мало что нужно учитывать:
- На данный момент Вы используете отдельные ссылки на базы данных. Это, вероятно, заставляет все строки передаваться по ссылке перед выполнением соединения. Если ссылки указывают на одну и ту же исходную базу данных, рассмотрите возможность создания представления в источнике с соединениями и различиями и выберите только это представление. Это может устранить необходимость ненужной передачи данных между базами данных
- Убедитесь, что доступно достаточное количество PGA, другими словами, что вы не ограничиваете размер
- Но в то же время убедитесь, что сервер не подкачивает. Если происходит подкачка, это резко замедляет запрос.
GJSS
Привет Венделиус - я использую ту же ссылку на БД, которая указывает на ту же базу данных.Кроме того, мы ссылаемся не только на удаленные таблицы, но и на таблицы, находящиеся в локальной базе данных. В таком случае, как же мы создадим представление, которое включает в себя полные результаты этого запроса select?
Wendelius
Если вы используете таблицы из обоих местоположений, вы должны убедиться, что передано минимальное количество строк. Попробуйте создать представление в удаленном конце, которое выполняет фильтрацию и объединение на основе данных, присутствующих в этой базе данных. Кроме того, вы, вероятно, можете добавить операцию distinct также в это представление, чтобы данные уже были различны при выборе из представления. После этого измените свой запрос, чтобы выбрать из представления через dblink и присоединить его к таблицам в локальной базе данных.
GJSS
Спасибо, Венделиус. Если мы создадим представление для хранения результатов запроса,которое имеет join и distinct., то как же оно будет обновляться с обновленными данными каждый раз? здесь мы должны запускать этот процесс еженедельно, чтобы загрузить инкрементные данные в целевую таблицу.
В таком случае, можем ли мы пойти с материализованным представлением?
Wendelius
Материализованное представление может быть вариантом, если вы, например, запрашиваете представление несколько раз, и возможные изменения в исходных данных не имеют значения. Однако почему бы не начать с традиционного взгляда и не посмотреть, что получится. После этого внесите изменения, если потребуются дополнительные корректировки. При обычном просмотре вам не нужно беспокоиться об обновлении данных. Это просто запрос, поэтому он не будет хранить никаких данных.