Использование точечной нотации против OpenQuery из SQL Server в Oracle - PullRequest
2 голосов
/ 02 мая 2019

Попытка перенести данные из Oracle в SQL Server. В SQL определен связанный сервер. Мне нужно отфильтровать данные на стороне Oracle, поэтому есть предложение WHERE, которое ограничивает данные на основе значения одного столбца (период времени).

Испытание производительности двумя разными методами: OpenQuery:

select * INTO T2 from OpenQuery(LinkedSrv,'select * from SCHEMA.TAB')

точечная нотация (LinkedServer..Schema.Table):

select * INTO T2 from LinkedSrv..SCHEMA.TAB

Оба выполняют медленные шаги, выдвигая около 5-6k строк в секунду. Для таблицы строк 20M это не идеально. И тут обнаружилось нечто довольно интересное:

select * INTO T2 from LinkedSrv..SCHEMA.TAB WHERE col >= Value

Это увеличивает пропускную способность почти до 100 тыс. Строк в секунду

Определение критериев с помощью OpenQuery не влияет на все. Объяснить план шоу

RemoteQuery -> ComputeScalar -> Filter (WHERE) -> TableInsert in the dot notation scenario with WHERE.

Кроме этого, объясните планы те же. Итак ... Как локальное добавление предложения WHERE (потому что именно там он это делает) повышает пропускную способность в 10 раз?

... А что я могу сделать для достижения (желаемого результата) такой же высокой пропускной способности при использовании OpenQuery?

Спасибо!

1 Ответ

1 голос
/ 03 мая 2019

Разница между точечной нотацией и методами OpenQuery заключается в том, что первый использует клиентский движок курсора, и большинство вещей оценивается локально, а второй отправляет запрос на удаленный сервер и читает вывод.

Не всегда фильтрация данных в запросе точечной нотации происходит быстрее, чем подход OpenQuery. Он основан на каждом локальном и удаленном сервере.

Проверьте следующий вопрос stackoverflow, они дадут вам больше информации:

Дополнительная информация

...