Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5   вперед  Ctrl      все
 Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Merge Merge
Guest
Есть ли преимущества Merge перед Insert+Update+Delete?

В частности, будет ли Merge отрабатывать быстрее?
6 авг 14, 14:01    [16406543]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
msLex
Member

Откуда:
Сообщений: 8240
Merge Merge
Есть ли преимущества Merge перед Insert+Update+Delete?

В частности, будет ли Merge отрабатывать быстрее?

зависит от.
в общем случае, чаще всего да.
6 авг 14, 14:03    [16406560]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
Merge Merge,

Попробуйте сами тесты сделайте на тестовом (домашнем) компе. Создайте табличку - заполните хламом (случайными данными), что бы размер был ее порядка хотя-бы 10 гб.

Ну и в другую таблицу инсертом переливка, транкейт приемника и мёрж. также с другими операциями.
перед каждой операцией выводите дату-время, что бы понимать сколько операция каждая выполнялась.
6 авг 14, 15:11    [16407089]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Jovanny
Member

Откуда:
Сообщений: 1195
Основное преимущество - что всё выполняется одним оператором, вместо нескольких, обёрнутых транзакцией.
Использую его очень часто.
6 авг 14, 18:25    [16408276]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
Merge Merge
Есть ли преимущества Merge перед Insert+Update+Delete?

В частности, будет ли Merge отрабатывать быстрее?
По моему, оператор Merge выполняется как отдельные Insert+Update+Delete, даже без общей транзакции.

Так что это просто форма записи.
6 авг 14, 18:48    [16408332]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
alexeyvg
Merge Merge
Есть ли преимущества Merge перед Insert+Update+Delete?

В частности, будет ли Merge отрабатывать быстрее?
По моему, оператор Merge выполняется как отдельные Insert+Update+Delete, даже без общей транзакции.

Так что это просто форма записи.
Однозначно, нет. Достаточно посмотреть план.

Сообщение было отредактировано: 6 авг 14, 18:51
6 авг 14, 18:50    [16408340]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
одсрлспсплс
Guest
Jovanny
Основное преимущество - что всё выполняется одним оператором, вместо нескольких, обёрнутых транзакцией.
Использую его очень часто.


в чем цимус?
6 авг 14, 18:50    [16408343]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Клон деды
Member

Откуда:
Сообщений: 6904
alexeyvg
Merge Merge
Есть ли преимущества Merge перед Insert+Update+Delete?

В частности, будет ли Merge отрабатывать быстрее?
По моему, оператор Merge выполняется как отдельные Insert+Update+Delete, даже без общей транзакции.

Не конечно, это атомарный оператор.
Более того наличие/отсутствие записи в target таблице проверяется единожды, в отличии от отдельный операторов Insert+Update+Delete.
6 авг 14, 18:51    [16408344]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Клон деды
alexeyvg
пропущено...
По моему, оператор Merge выполняется как отдельные Insert+Update+Delete, даже без общей транзакции.

Не конечно, это атомарный оператор.
Более того наличие/отсутствие записи в target таблице проверяется единожды, в отличии от отдельный операторов Insert+Update+Delete.
Ой ли?
6 авг 14, 19:01    [16408389]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
Merge Merge,

Из своей практики поделюсь тем с чем имел дело. Лет 5 назад была задача перелить одну большую таблицу в 200Гб вроде в другую таблицу с измененной структурой и плюсом еще секционированную. В то время я делал для себя много открытий, bulk insert еще не пользовался, а пользовался исключительно T-SQL. Так вот на тестовой зоне INSERT SELECT запустил на выходных и после 2х суток оператор не завершил свое выполнение. После "попробовал" только вставку командой MERGE - операция завершилась за 2 часа.
(Не стал пробовать INSERT SELECT TOP (1000) .... в цикле).

Причины глубинной истины я для себя не открыл - по какой причине такая разница во времени, но для меня стало очевидно что, все таки что MERGE физически работает иначе нежели INSERT. Можно предположить что в журнале транзакции MERGE пишет минимум, в отличие от INSERT, можно еще что то другое - глубже не заморачивался. Но все таки пример живой из практики.
6 авг 14, 19:01    [16408390]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Antoshka
Member

Откуда:
Сообщений: 828
При вставке с помощью MEGRE можно захватить в OUTPUT любые колонки, а не только из таблицы-приёмника (ограничение OUTPUT в операторе INSERT). Иногда эта фича здорово выручает.
6 авг 14, 22:23    [16409018]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8734
Antoshka
При вставке с помощью MEGRE можно захватить в OUTPUT любые колонки, а не только из таблицы-приёмника (ограничение OUTPUT в операторе INSERT). Иногда эта фича здорово выручает.

... и вообще - приятнее. :)
7 авг 14, 08:42    [16409788]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Jovanny
Member

Откуда:
Сообщений: 1195
одсрлспсплс
Jovanny
Основное преимущество - что всё выполняется одним оператором, вместо нескольких, обёрнутых транзакцией.
Использую его очень часто.


в чем цимус?

Допустим, надо синхронизировать 2 таблицы.

BEGIN TRANSACTION
--отсутствующие записи
INSERT TargetTable
SELECT * FROM SourceTable WHERE ...

--обновить имеющиеся
UPDATE TargetTable
SET ...
WHERE ...

--удалить отсутствующие
DELETE TargetTable
WHERE ...

COMMIT TRANSACTION


Или один MERGE.
Как вы думаете, сколько будет чтений (Scan или Seek) в первом и во втором случае?
Про компактность и понятность кода я уже не говорю.
7 авг 14, 12:30    [16411026]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Jovanny
Или один MERGE.
Как вы думаете, сколько будет чтений (Scan или Seek) в первом и во втором случае?
Про компактность и понятность кода я уже не говорю.

Ага и отменяться будет тоже вся команда MERGE.
А при последовательных командах начать можно будет с упавшей команды
7 авг 14, 12:35    [16411066]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
А SSIS попробовать не хотите. Есть Merge блок, есть Slowly Chnaging Dimention
7 авг 14, 12:54    [16411224]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
Glory
Jovanny
Или один MERGE.
Как вы думаете, сколько будет чтений (Scan или Seek) в первом и во втором случае?
Про компактность и понятность кода я уже не говорю.

Ага и отменяться будет тоже вся команда MERGE.
А при последовательных командах начать можно будет с упавшей команды
Не поможет.
Все изменения нужно будет делать в рамках единой транзакции. Что автоматически приведет к отмене действий всех (уже трех - insert/update/delete) команд.
Не учитывая прочих "радостей и прелестей"...
7 авг 14, 15:19    [16412269]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Glory
Member

Откуда:
Сообщений: 104760
sphinx_mv
Все изменения нужно будет делать в рамках единой транзакции.

А зачем делать это в рамках одной транзакции ?
Нельзя разве сначала обновить существующие записи, а потом добавить новые ?
7 авг 14, 15:22    [16412299]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
Glory
sphinx_mv
Все изменения нужно будет делать в рамках единой транзакции.

А зачем делать это в рамках одной транзакции ?
Нельзя разве сначала обновить существующие записи, а потом добавить новые ?
Оптимистичненько... Типа, в интервале между этим двумя разными операциями в данных ничего и никогда не произойдет... :))
7 авг 14, 15:35    [16412383]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Glory
Member

Откуда:
Сообщений: 104760
sphinx_mv
Типа, в интервале между этим двумя разными операциями в данных ничего и никогда не произойдет..

да. Потому что умные люди сначала вычитывают данные из источника в stage table.
А не лезут каждый раз к изменяющемуся источнику.

Сообщение было отредактировано: 7 авг 14, 15:38
7 авг 14, 15:38    [16412417]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
Glory
sphinx_mv
Типа, в интервале между этим двумя разными операциями в данных ничего и никогда не произойдет..

да. Потому что умные люди сначала вычитывают данные из источника в stage table.
А не лезут каждый раз к изменяющемуся источнику.
А тут получили еще некотрое количество дополнительных операции.
Ну, как минимум,... а) загрузка исходных данных в stage; б) зачистка stage после обработки (ладно, через truncate) и в) случись чего, это ТОЖЕ надо откатывать... Вряд ли это будет хорошо смотреться на регулярной основе по таблицам-"многомиллионникам"...

Разве что в stage писать дельту - на вставку, обновление и удаление... И потом уже их накатывать...
7 авг 14, 15:59    [16412573]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Glory
Member

Откуда:
Сообщений: 104760
sphinx_mv
Разве что в stage писать дельту - на вставку, обновление и удаление... И потом уже их накатывать...

Можно и так. Главное, что stage

sphinx_mv
А тут получили еще некотрое количество дополнительных операции.

А также возможность перезапускать упавший процесс с нужной точки, а не начинать его сначала.
Как вы думаете, больше времени потеряется при успешных Insert+Update+Delete vs MERGE или при упавших Insert+Update+Delete vs MERGE ?
7 авг 14, 16:04    [16412627]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
msLex
Member

Откуда:
Сообщений: 8240
Glory
Как вы думаете, больше времени потеряется при успешных Insert+Update+Delete vs MERGE или при упавших Insert+Update+Delete vs MERGE ?

зависит от частоты падений.
если падение это нештатная ситуация происходящая 1 раз из 1000, то выигрыш, скорее всего, будут за MERGE.
7 авг 14, 16:16    [16412705]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Glory
Member

Откуда:
Сообщений: 104760
msLex
зависит от частоты падений.

Бинго !
А теперь подумайте, что вызывает больше проблем - успешные выполнения или неуспешные ?
Если я из скажем при часовой загрузки выиграю 5 минут на успешном MERGE, но проиграю этот час на неуспешном, то даже ради 1 из 1000 случаев, я лично не выберу MERGE.
7 авг 14, 16:19    [16412736]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
msLex
Member

Откуда:
Сообщений: 8240
Glory
msLex
зависит от частоты падений.

Бинго !
А теперь подумайте, что вызывает больше проблем - успешные выполнения или неуспешные ?
Если я из скажем при часовой загрузки выиграю 5 минут на успешном MERGE, но проиграю этот час на неуспешном, то даже ради 1 из 1000 случаев, я лично не выберу MERGE.

во-первых, с чего вы вязли, что загрузка длится час?
во-вторых, если вы проиграли 1 час в 1-ой загрузке из 1000, но выиграли по 5 минут на остальных 999 - то чистого времени на обработку вы выиграли 999 * 5 - 60 = 4935 минут (3,5 суток).
7 авг 14, 16:26    [16412801]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Glory
Member

Откуда:
Сообщений: 104760
msLex
во-первых, с чего вы вязли, что загрузка длится час?

Потому что словосочентание " скажем при часовой загрузки" эквивалентно "например при часовой загрузки"
Вместо "1 час" вы можете подстваить другую цифру

msLex
во-вторых, если вы проиграли 1 час в 1-ой загрузке из 1000, но выиграли по 5 минут на остальных 999 - то чистого времени на обработку вы выиграли 999 * 5 - 60 = 4935 минут (3,5 суток).

Только эти 3.5 суток - они виртуальные. Я не могу их потратить слудующие неудачные загрузки. Дя ни на что я их не могу потратить.
7 авг 14, 16:30    [16412828]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить