Огромное количество данных из исходной таблицы, где не существует, до целевой таблицы - PullRequest
0 голосов
/ 17 мая 2018

У меня возникли проблемы с выбором данных из исходной таблицы в таблицу назначения, чтобы выяснить, какие данные из исходной таблицы еще не полностью интегрированы в таблицу назначения.

Исходная таблица - это еще одна СУБД, в которой в SQL Server мы использовали связанный сервер для доступа к этой СУБД исходной таблицы, и интеграция в значительной степени проста от столбца к столбцу от источника к месту назначения (других вычислений нет)

Когда я выполняю оператор выбора, подобный этому

SELECT A.*  
FROM [ORCLE_DB]..GROUP.TABLEA AS A 
WHERE NOT EXISTS (SELECT 1 FROM TABLEA as B WHERE A.ID = B.ID)

Выбор данных занял целую вечность, а объем данных довольно велик - около 20 миллионов строк данных.

Существуют ли другие способы выбора этих строк, которые могут позволить выполнение SELECT эффективно и быстрее? Большое спасибо, любые идеи и советы будут так высоко оценены

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Если TABLEA значительно меньше, чем [ORACLE_DB]..GOUP.TABLEA, вы можете создать связанный сервер из оракула, который ссылается на ваш SqlServer TABLEA, а затем просто запросить представление или выполнить хранимую процедуру, находящуюся в оракуле, чтобы дорогая фильтрациявыполняется там, где большая часть данных находится вместо SqlServer.

0 голосов
/ 17 мая 2018

Вы, вероятно, не согласны с распределенным запросом, идущим 'N + 1'.Эвристика несколько загадочна в том, как ограничивает скорость сети.Вы можете проверить это с помощью SQL Profiler.

Если это так, вы можете исправить это путем:

  1. , создав локальную временную таблицу для размещения всех необходимых данных из удаленной таблицы связанного сервера.) [и применить любое другое сопоставление к столбцам временной таблицы]
  2. вставить удаленные данные в локальную временную таблицу
  3. соединить локальную таблицу с временной таблицей.
...