Одна ВСТАВКА с СОЮЗАМИ или несколькими ВСТАВКАМИ? - PullRequest
10 голосов
/ 01 сентября 2010

У меня есть функция sql, которая возвращает таблицу.Таблица заполняется 6 или около того достаточно сложными операторами.

Лучше ли объединять эти операторы, чтобы была только 1 вставка, или лучше хранить их отдельно?

Или это некакая разница?

Ответы [ 6 ]

6 голосов
/ 01 сентября 2010

Я бы просто UNION ALL их - ключ там не UNION (который может быть менее эффективен при дедупликации), а UNION ALL.

5 голосов
/ 01 сентября 2010

Вместо того, чтобы думать самостоятельно, какое лучшее решение я предлагаю в качестве подсказки для правильного использования инструмента.

На сервере SQL, использующем Managment Studio, вы можете оценить производительность по Display Estimated Execution Plan.Таким образом, вы действительно можете увидеть различия между двумя вашими случаями и выбрать лучший, наблюдая за результатами.

4 голосов
/ 23 августа 2013

Я предложу отдельные вкладыши. Я обнаружил, что производительность вставки с Union All очень низкая по сравнению с отдельными вставками. Я попытался вставить около 3500 записей, используя оба подхода, отдельные операторы вставки были в 4 раза быстрее. (Это может варьироваться в зависимости от количества столбцов в вашей вставке)

4 голосов
/ 01 сентября 2010

На самом деле, это имеет значение.

Когда у вас есть отдельные INSERT s, вы должны позаботиться о том, чтобы сделать это внутри транзакции, чтобы у вас всегда было согласованное состояние. Но, поскольку они разделены, объем памяти, необходимый серверу для выполнения, меньше, потому что каждый INSERT имеет свой собственный набор результатов - после завершения запроса сервер может выполнить другой запрос и т. Д.

Когда у вас есть все внутри одного большого запроса, к которому присоединяется UNION ALL, серверу потребуется больше временных таблиц и больше памяти для завершения. Но, таким образом, у вас есть что-то типа «объемной» вставки, что может привести к более быстрой вставке.

Лично я бы пошел с отдельными вставками внутри транзакции. Иногда простое выполнение чего-то более выгодного с точки зрения удобства сопровождения и отладки, чем незначительный выигрыш в производительности (если есть, зависит от количества вставляемых строк)

2 голосов
/ 01 сентября 2010

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

Я хотел бы увидеть подробности функции и ее использования, поскольку возможно, что она вообще может не понадобиться.

0 голосов
/ 07 февраля 2019

UNION v / s UNION ALL не являются функционально одинаковыми.Соблюдайте осторожность при использовании UNION, так как он будет пытаться выполнить дедупликацию, и, возможно, это может быть не тот результат, который вы изначально искали.

Что касается вопроса, несколько INSERT могут быть быстрееучитывая меньшее количество записей по сравнению с UNION ALL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...