2016-03-28 3 views
0

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

Мы замечаем, что такие запросы, как, например, следующие порядковые величины, чем ожидалось.

DELETE OPENQUERY(server, 'SELECT * FROM table WHERE pkf1 = ''v1'' AND pkf2 = ''v2''') 

Например, если выше было переписано как:

exec('DELETE * FROM table WHERE pkf1 = ''v1'' and pkf2 = ''v2''') at server 

или

DELETE FROM server.schema.table WHERE pkf1 = 'v1' and pkf2 = 'v2' 

производительность всего за несколько секунд по сравнению минут с использованием OPENQUERY.

Может кто-нибудь объяснить, почему подход OPENQUERY настолько неэффективен для сравнения? Не использует ли он первичные индексы?

+0

вы можете взглянуть здесь https://support.microsoft.com/en-us/kb/309182 – jthalliens

+0

«принимая заказы величиной долго, чем ожидалось». Ваше ожидание ошибочно. Я думаю, что медленный запрос переносит записи локально перед удалением, а быстрые - нет. OPENQUERY возвращает локальный результат, а другие - нет. Однако я не был знаком с синтаксисом 'at server'. Интересно. Разумеется, это говорит о том, что операции происходят на сервере, а не на клиенте. –

ответ

0

Открытый запрос имеет лучший обработчик, чем простой запрос, как DELETE, и запрос разрешения в удаленном сервере

Смежные вопросы