Попытка перенести данные из 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?
Спасибо!