У нас есть серия программ, предназначенных для перемещения данных из одной базы данных 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
настолько неэффективен для сравнения? Не использует ли он первичные индексы?
вы можете взглянуть здесь https://support.microsoft.com/en-us/kb/309182 – jthalliens
«принимая заказы величиной долго, чем ожидалось». Ваше ожидание ошибочно. Я думаю, что медленный запрос переносит записи локально перед удалением, а быстрые - нет. OPENQUERY возвращает локальный результат, а другие - нет. Однако я не был знаком с синтаксисом 'at server'. Интересно. Разумеется, это говорит о том, что операции происходят на сервере, а не на клиенте. –