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

Откуда:
Сообщений: 104760
sphinx_mv
Glory
пропущено...

Если в источнике записи с повторяющимся ключом ?
Да-да, такое бывает
Не верю! (с)
Если значение атрибута повторяется - это НИ РАЗУ НЕ ключ... И тоже БЕЗ ВАРИАНТОВ... :)

Наивный. Ключ - он в таблице. А запрос, которым вы выбираете данные из источника может вам вернуть что-угодно. Потому что у результатов запроса нет никаких ключей.
7 авг 14, 17:13    [16413206]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
Glory
Ключи уникальности и так проверяются при каждом Insert+Update+Delete
Правильно.
Отдельно для Insert... Отдельно для Update... Отдельно для Delete... Итого, 3 (три!) раза...
В сравнении с 1 раз для Merge...
7 авг 14, 17:14    [16413213]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Glory
Member

Откуда:
Сообщений: 104760
sphinx_mv
Glory
Ключи уникальности и так проверяются при каждом Insert+Update+Delete
Правильно.
Отдельно для Insert... Отдельно для Update... Отдельно для Delete... Итого, 3 (три!) раза...
В сравнении с 1 раз для Merge...

Фейспалм. 1 раз для всего Merge ? Или 1 раз для каждой затронутой записи ?
По-вашему Merge заранее знает, сколько у него будет I/U/D ?
7 авг 14, 17:17    [16413235]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
Glory
sphinx_mv
пропущено...
Не верю! (с)
Если значение атрибута повторяется - это НИ РАЗУ НЕ ключ... И тоже БЕЗ ВАРИАНТОВ... :)

Наивный. Ключ - он в таблице. А запрос, которым вы выбираете данные из источника может вам вернуть что-угодно. Потому что у результатов запроса нет никаких ключей.
Да ну?! :)
Для выявления расхождений между данными в источнике и назначении их только по правильно выбраным ключам и нужно связывать. Любые другие способы связи источника и назначения, как уже намекалось - путь в никуда...
7 авг 14, 17:18    [16413255]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Glory
Member

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

И что ?
Источник вренул вам дубликат ключа. Как связывание источника и приемника уберет этот дубликат ?
7 авг 14, 17:22    [16413281]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
msLex
sphinx_mv
И достаточно часто при этом физические дисковые операции не самый потребляемый ресурс...

sphinx_mv
К сожалению, у меня на сервере не настолько много памяти...

по-моему, это взаимоисключающие параграфы.
Ну, если сильно придираться. :)
Потому как есть еще ресурсы процессора... Эскалация блокировок... и т.д. и т.п..
7 авг 14, 17:24    [16413302]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
msLex
Member

Откуда:
Сообщений: 8191
sphinx_mv
Ну, если сильно придираться. :)
Потому как есть еще ресурсы процессора... Эскалация блокировок... и т.д. и т.п..

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

Откуда:
Сообщений: 1672
Glory
sphinx_mv
Правильно.
Отдельно для Insert... Отдельно для Update... Отдельно для Delete... Итого, 3 (три!) раза...
В сравнении с 1 раз для Merge...

Фейспалм. 1 раз для всего Merge ? Или 1 раз для каждой затронутой записи ?
Сравнивать записи по совпадению ключей нужно ровно 1 раз... Для всего набора данных. Дальнейшие операции - сугубо "по указателю"...
Glory
По-вашему Merge заранее знает, сколько у него будет I/U/D ?
А зачем знать конкретное количество отдельно взятых IUD, которые будут выполнены при MERGE?
Необходимо и достаточно, что перед тем, как сервер их выполняет, он получает эквивалент JOIN между источником и назначением, по результату которого потом и будут выполоняться конкретные изменения - сервер практически уже имеет наборы записей для выполнения этих отдельно взятых изменений.
7 авг 14, 17:37    [16413395]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Glory
Member

Откуда:
Сообщений: 104760
sphinx_mv
Сравнивать записи по совпадению ключей нужно ровно 1 раз...

Вы о чем ?
Если я делаю INSERT/UPDATE в таблицу c уникальным ключом, что мне нужно сравнивать, если при наличии дубликата я получу ошибку ?
7 авг 14, 17:41    [16413410]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Glory
Member

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

И как это гарантирует, что при изменении данных в таблице нельзя будет нарушить уникальность ?
7 авг 14, 17:42    [16413415]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
msLex
sphinx_mv
Ну, если сильно придираться. :)
Потому как есть еще ресурсы процессора... Эскалация блокировок... и т.д. и т.п..

если нужно читать данных с диска, то все остальные эскалации блокировок и прочие процессорные ресурсы для мержа несущественны
Если кроме "отдельно взятого "процесса слияния на сервере больше ничего не выполняется, то можно считать, что конкуренция за ресурсы не важна... Но, к сожалению, в реальном мире не очень просто обеспечить монополию на сервер. Что хуже - часто сервера источника и назначения могут быть физически разными (тут уже монополию на 2 сервера не помешало бы)... И совсем "нехорошо" - в "реальном мире" источник и назначение для слияния могут "жить" не только на разных физических SQL-серверах, но даже SQL-серверах от разных вендоров.
7 авг 14, 17:46    [16413440]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
Glory
sphinx_mv
Сравнивать записи по совпадению ключей нужно ровно 1 раз...

Вы о чем ?
Если я делаю INSERT/UPDATE в таблицу c уникальным ключом, что мне нужно сравнивать, если при наличии дубликата я получу ошибку ?
Ок. "Наскидкунаколенках". мегапроект-концепция...
-- Определение таблиц (сугубо для примера)
CREATE TABLE src (PKID INT PRIMARY KEY, DATA VARCHAR(10))
CREATE TABLE dst (PKID INT PRIMARY KEY, DATA VARCHAR(10))

-- Удаление "лишних" записей
DELETE dst
FROM dst d
WHERE NOT EXISTS (SELECT 1 FROM src t WHERE t.PKID = d.PKID )

-- Обновление записей
UPDATE dst
SET data = s.data
FROM dst d INNER JOIN src s ON d.PKID = s.PKID 

-- Вставка отсуствующих записей
INSERT dst
SELECT * FROM src s
WHERE NOT EXISTS (SELECT 1 FROM dst t WHERE t.PKID = src.PKID )
Вместо использованного в примере первичного ключа можно использовать любой уникальный ключ, включая составные.
Мне не хватает вооражения, чтобы представить ситуацию, чтобы можно было получить нарушение уникальности при связи двух таблиц по уникальным ключам
7 авг 14, 18:10    [16413547]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
sphinx_mv
Member [заблокирован]

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

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

Откуда:
Сообщений: 104760
sphinx_mv
Glory
пропущено...

И как это гарантирует, что при изменении данных в таблице нельзя будет нарушить уникальность ?
А как Вы себе представляете ситуацию, чтобы соединение по уникальным ключам дало неуникальные комбинации ключей?

Еще раз. Медленно.
У запроса (не таблицы), который возвращает данные из таблицы-источника, нет никакого физического уникального ключа. Хотя у таблицы он может быть.
И если этот запрос вернул дубликаты, то никакое соединение не избавит вас от дубликатов.
7 авг 14, 21:36    [16414241]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
Glory
sphinx_mv
пропущено...
А как Вы себе представляете ситуацию, чтобы соединение по уникальным ключам дало неуникальные комбинации ключей?

Еще раз. Медленно.
У запроса (не таблицы), который возвращает данные из таблицы-источника, нет никакого физического уникального ключа. Хотя у таблицы он может быть.
"Внезапно!" :)
А если сделать выборку ТОЛЬКО из полей таблицы, которые входят в уникальный ключ, в результирующем наборе дубликаты (ака, "неуникальные комбинации") по этим полям появятся? А если добавить в выборку поля, не входящие в ключи, как изменится ситуация с дубликатами по ключевым полям?
Комбинация значений полей ключа как была уникальной в исходной таблице, так и останется уникальной в результирующей выборке - со всеми втекающе-вытекающими...
Glory
И если этот запрос вернул дубликаты, то никакое соединение не избавит вас от дубликатов.
"Рукалицо"... :)
Дубликаты?! При соединении по ключевым полям?!
7 авг 14, 23:44    [16414725]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Glory
Member

Откуда:
Сообщений: 104760
sphinx_mv
При соединении по ключевым полям?!

Я фигею.
Вот с чего вы решили, что соединение убирает дубликаты ?

sphinx_mv
А если сделать выборку ТОЛЬКО из полей таблицы, которые входят в уникальный ключ, в результирующем наборе дубликаты (ака, "неуникальные комбинации") по этим полям появятся?

Вы не поверите, но могут.
Правда это скорее всего будет сбой индекса.

sphinx_mv
Комбинация значений полей ключа как была уникальной в исходной таблице, так и останется уникальной в результирующей выборке - со всеми втекающе-вытекающими...

Если вы пишите запросы только к таблицам и только строго к одной таблицы, то это не значит, что все другие так делают.
8 авг 14, 09:17    [16415229]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
dolboeb000001
Guest
sphinx_mv
Glory
пропущено...

Еще раз. Медленно.
У запроса (не таблицы), который возвращает данные из таблицы-источника, нет никакого физического уникального ключа. Хотя у таблицы он может быть.
"Внезапно!" :)
А если сделать выборку ТОЛЬКО из полей таблицы, которые входят в уникальный ключ, в результирующем наборе дубликаты (ака, "неуникальные комбинации") по этим полям появятся? А если добавить в выборку поля, не входящие в ключи, как изменится ситуация с дубликатами по ключевым полям?
Комбинация значений полей ключа как была уникальной в исходной таблице, так и останется уникальной в результирующей выборке - со всеми втекающе-вытекающими...
Glory
И если этот запрос вернул дубликаты, то никакое соединение не избавит вас от дубликатов.
"Рукалицо"... :)
Дубликаты?! При соединении по ключевым полям?!


create table t(id int primary key);

select id from t cross join (select 1 union all select 1) d(n);

у таблицы ук есть' а у запроса нет.
8 авг 14, 09:18    [16415232]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3618
Всегда удобнее иметь больше возможностей!! Это удобно.
Мерж хорош, очень.
Единственное когда я его не использовал - был варинт когда инсерт делался bulk-ом.
8 авг 14, 10:38    [16415680]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
dolboeb000001
sphinx_mv
пропущено...
"Внезапно!" :)
А если сделать выборку ТОЛЬКО из полей таблицы, которые входят в уникальный ключ, в результирующем наборе дубликаты (ака, "неуникальные комбинации") по этим полям появятся? А если добавить в выборку поля, не входящие в ключи, как изменится ситуация с дубликатами по ключевым полям?
Комбинация значений полей ключа как была уникальной в исходной таблице, так и останется уникальной в результирующей выборке - со всеми втекающе-вытекающими...
пропущено...
"Рукалицо"... :)
Дубликаты?! При соединении по ключевым полям?!


create table t(id int primary key);

select id from t cross join (select 1 union all select 1) d(n);

у таблицы ук есть' а у запроса нет.
"Рукалицо" (с)
Показать в каком месте Вы умудрились засунуть "соединение по ключам" не затруднитесь?
Та самая кляуза ON? Ну, или WHERE (на худой конец)?
На всякий случай (если у кого проблемы с поиском) цитирую доку:
Using Cross Joins
A cross join that does not have a WHERE clause produces the Cartesian product of the tables involved in the join.
Настоятельно рекомендую примеры по ссылке из документации для самостоятельного изучения.
8 авг 14, 10:42    [16415708]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Glory
Member

Откуда:
Сообщений: 104760
sphinx_mv
Показать в каком месте Вы умудрились засунуть "соединение по ключам" не затруднитесь?
Та самая кляуза ON? Ну, или WHERE (на худой конец)?

Да пожалуйста
select id from t join (select 1 union all select 1) d(n) on d.n=t.id;
8 авг 14, 10:47    [16415737]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
Glory
sphinx_mv
При соединении по ключевым полям?!

Я фигею.
Вот с чего вы решили, что соединение убирает дубликаты ?
Это Вы (почему-то) всех убеждаете, что при соединении по первичным/уникальным ключам "внезапно" (с) появляются дубликаты...
Glory
sphinx_mv
А если сделать выборку ТОЛЬКО из полей таблицы, которые входят в уникальный ключ, в результирующем наборе дубликаты (ака, "неуникальные комбинации") по этим полям появятся?

Вы не поверите, но могут.
Правда это скорее всего будет сбой индекса.
А еще могут быть землетрясения, наводнения, пожары...
Метеорит может упасть... Уборщица кабель питания сервера из розетки выдернет...
Про отношение к исключительным ситуациям я уже высказывался.
Криворучие и рукожопие обслуживающего персонала, который не способен минимизировать вероятность возникновения проблем и их последствия вплоть до полного исключения, меня не волнуют. То есть - вообще!
Glory
sphinx_mv
Комбинация значений полей ключа как была уникальной в исходной таблице, так и останется уникальной в результирующей выборке - со всеми втекающе-вытекающими...

Если вы пишите запросы только к таблицам и только строго к одной таблицы, то это не значит, что все другие так делают.
Если эти некоторые "другие" в конкретно описанных условиях для конкретной задачи с конкретно указанными требованиями оказываются не способны написать правильный запрос, возвращающий правильные результаты - почему Вы решили, что это моя проблема?!
8 авг 14, 10:54    [16415793]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
Glory
sphinx_mv
Показать в каком месте Вы умудрились засунуть "соединение по ключам" не затруднитесь?
Та самая кляуза ON? Ну, или WHERE (на худой конец)?

Да пожалуйста
select id from t join (select 1 union all select 1) d(n) on d.n=t.id;
"Рукалицо" (с)
Неслабые у Вас "соединенеия по ключам"... А не затруднитесь ли выделить "болдом" это самое "соединение" в Вашем запросе?

ЗЫ. На всякий случай... Вы с обсуждаемой задачей ТОЧНО знакомы? И Вы ТОЧНО понимаете требования и условия? Ибо начинают терзать весьма не-смутные сомнения...
8 авг 14, 11:01    [16415845]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Glory
Member

Откуда:
Сообщений: 104760
sphinx_mv
Это Вы (почему-то) всех убеждаете, что при соединении по первичным/уникальным ключам "внезапно" (с) появляются дубликаты...

Это вы не читаете ответы.
И свято убеждены, что наличие ключа в таблице почему то гарантирует наличие клбюча в результатах запроса

sphinx_mv
Если эти некоторые "другие" в конкретно описанных условиях для конкретной задачи с конкретно указанными требованиями оказываются не способны написать правильный запрос, возвращающий правильные результаты - почему Вы решили, что это моя проблема?!

Охренеть.
Вы наверное настолько круты, что все админы всех других серверов вам дают все права на все таблицы.
А не урезенные права на какое-то представление

Если источник предоставлет данные только в 2 часа ночи, а загрузка должна быть завершена до 3х часов ночи, то я никогда не выберу MERGE. Потому, что с каждой минутой после 2х, чем меньше действий для восстановления загрузки нужно будет произвести при сбое, тем лучше. И никакие накопленные за предудущие успешные запуски минуты тут не помогут. Если ваш MERGE упал в 2-45 на последней записи последнего DELETE, то фиг он успеет до 3х часов загрузить все. А вот мой отдельный DELETE может и успеет.
8 авг 14, 11:04    [16415864]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
Glory
Member

Откуда:
Сообщений: 104760
sphinx_mv
"Рукалицо" (с)
Неслабые у Вас "соединенеия по ключам"... А не затруднитесь ли выделить "болдом" это самое "соединение" в Вашем запросе?

Снимите шоры с глаз, выньте бананы из ушей и вернитесь в реальный мир.
Где реальные запросы оперируют реальными данными.
8 авг 14, 11:05    [16415874]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли преимущества Merge перед Insert+Update+Delete?  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
Glory
sphinx_mv
"Рукалицо" (с)
Неслабые у Вас "соединенеия по ключам"... А не затруднитесь ли выделить "болдом" это самое "соединение" в Вашем запросе?

Снимите шоры с глаз, выньте бананы из ушей и вернитесь в реальный мир.
Где реальные запросы оперируют реальными данными.
"Рукалицо" (с)
А кто (и когда) Вам сказал, что это именно Вы находитесь в "реальном мире"?!
И с каких пор примеры Ваших "недо-запросов", выдающих кривые (с точки зрения поставленной и обсуждаемой задачи) результаты стали "реальными"?!

ЗЫ. "И эти люди запрещают мне ковыряться в носу!" (с)
ЗЗЫ. Хреново, когда у модератора нервишки по-шаливают...
8 авг 14, 11:15    [16415964]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить