Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Update vs Множественная вставка  [new]
vi0
Member

Откуда:
Сообщений: 265
Коллеги, есть потребность вставки в таблицу записей, чтобы регламентное задание обрабатывало их.
Регламентное задание регулярно обрабатывает записи со статусом = 0.
Привожу два способа, как это реализовать.
Как думаете, теоретически является ли первый способ оптимальнее по ресурсоемкости, при прочих равных?

1.
Insert into table1 (Fld1, Fld2, State) Values (‘Customer1’, ‘2012-06-14’, -1)   
Insert into table1 (Fld1, Fld2, State) Values (‘Customer2’, ‘2012-06-15’, -1)   

Update table1  set State = 0 Where State = -1

2.
begin tran
  Insert into table1 (Fld1, Fld2, State) Values (‘Customer1’, ‘2012-06-14’, 0)   
  Insert into table1 (Fld1, Fld2, State) Values (‘Customer2’, ‘2012-06-15’, 0)   
End tran
1 дек 14, 16:40    [16932431]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
Glory
Member

Откуда:
Сообщений: 104760
vi0
теоретически является ли первый способ оптимальнее по ресурсоемкости, при прочих равных?

Как 3и запроса вместо 2х могут буть менее ресурсоемкими ?
1 дек 14, 16:43    [16932450]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
iap
Member

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

судя по кавычкам, у Вас MySQL.
Тогда Вы не туда попали
1 дек 14, 16:43    [16932458]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
vi0
Member

Откуда:
Сообщений: 265
iap
судя по кавычкам, у Вас MySQL.
Тогда Вы не туда попали
MS SQL
это из документации пример
1 дек 14, 16:44    [16932469]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37075
vi0
iap
судя по кавычкам, у Вас MySQL.
Тогда Вы не туда попали
MS SQL
это из документации пример

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '‘'.
1 дек 14, 16:45    [16932482]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
vi0
Member

Откуда:
Сообщений: 265
Glory
Как 3и запроса вместо 2х могут буть менее ресурсоемкими ?
если быть точным то у меня вопрос про использование ресурсов транзациями
как я вижу, в первом случае у UPDATE будет относительно небольшая транзация, т.к. меняется одно поле (так?)
во втором она бОльшая т.к. выполняется вставка
1 дек 14, 16:47    [16932495]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
vi0
Member

Откуда:
Сообщений: 265
Гавриленко Сергей Алексеевич
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '‘'.
будем считать это опечаткой
вопрос по MS SQL
1 дек 14, 16:49    [16932512]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
Konst_One
Member

Откуда:
Сообщений: 11543
а скрипт таблички где?
а если поле Status входит в индекс, например?
1 дек 14, 16:49    [16932515]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
Glory
Member

Откуда:
Сообщений: 104760
vi0
в первом случае у UPDATE будет относительно небольшая транзация, т.к. меняется одно поле (так?)

А 2 insert-а без транзакций что ли вы считете ?
Ничего, что конечный результат ваших двух скриптов может оказаться разным ?
1 дек 14, 16:51    [16932520]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
vi0
Member

Откуда:
Сообщений: 265
Konst_One
а скрипт таблички где?
а если поле Status входит в индекс, например?
хороший вопрос
скриптов еще нет - структура проектируется сейчас
1 дек 14, 16:55    [16932560]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
vi0
Member

Откуда:
Сообщений: 265
Glory
А 2 insert-а без транзакций что ли вы считете ?
Ничего, что конечный результат ваших двух скриптов может оказаться разным ?
согласен - результат может быть разным, но если рассмотреть про прочих равных условиях

опять же почему задаю вопрос - спрашиваю про большИе транзакции: у Update в первом случае и Вставки во втором
есть же рекомендация - делать транзакции по возможности небольшими

в вопросе по первому случаю опустил вставки т.к. там не вижу ситуации, когда использование ресурсов может быть критичным
в сабже мне интересен имено случай, когда транзация может стать критически большой
1 дек 14, 17:01    [16932603]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
Glory
Member

Откуда:
Сообщений: 104760
vi0
о если рассмотреть про прочих равных условиях

Каких "прочих равных" то ?
3и транзакции по 1ой команде в каждой против 1ой транзакции с 2мя командами ?
что у них "прочее равное" ?
1 дек 14, 17:03    [16932620]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
Glory
Member

Откуда:
Сообщений: 104760
vi0
в сабже мне интересен имено случай, когда транзация может стать критически большой

О каком размере транзакции вы говорите, если вам не важен результат ваших скриптов ?
Транзакции между прочим создают, когда результат как раз важен и должен быть однозначным
1 дек 14, 17:05    [16932635]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
iap
Member

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

вставлять одним INSERTом сразу правильные данные религия не позволяет?
Мало того, для данного случая специально придумали CONSTRAINT DEFAULT
1 дек 14, 17:05    [16932636]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
Konst_One
Member

Откуда:
Сообщений: 11543
может тут ТС хочет что-то типа MERGE ?
1 дек 14, 17:08    [16932663]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
vi0
Member

Откуда:
Сообщений: 265
Glory
Каких "прочих равных" то ?
3и транзакции по 1ой команде в каждой против 1ой транзакции с 2мя командами ?
что у них "прочее равное" ?
опишу подробнее

1.
Выполняются insertы. В случае неуспеха очередного insertа, устраняем причину и записываем все, в итоге.
Делаем Update поля State.

2.
Выполняем insertы всех записей со значением State = 0.


Здесь я вижу, что результат будет одинаковый в обоих случаях (этот одинаковый результат я подразумевал, когда говорил "при прочих равных").

Вопрос:
При обновлении одного поля в транзакции будет ли использоваться меньше ресурсов
по сравнению со случаем, когда выполняется вставка записей в одной транзакции?
1 дек 14, 17:14    [16932720]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
vi0
Member

Откуда:
Сообщений: 265
iap
одним INSERTом сразу правильные данные религия не позволяет?
Мало того, для данного случая специально придумали CONSTRAINT DEFAULT
методику "вставка, установка статуса" прочитал в документации базы, которая используется как шлюз между хостом и оборудованием
сейчас делаем нечто аналогичное, и я пытаюсь понять смысл сей методики
1 дек 14, 17:20    [16932771]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7945
vi0, странная методика, она может привести к недостоверности сохранённых данных.
1 дек 14, 17:22    [16932794]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
a_voronin
Member

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

Загоните ваши Insert-ы во временную или буфферную таблицу (на 2014 можно и в In-Memory таблицу).

Одной операцией вставьте их в конечную таблицу.
1 дек 14, 17:40    [16932964]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
Glory
Member

Откуда:
Сообщений: 104760
vi0

1.
Выполняются insertы. В случае неуспеха очередного insertа, устраняем причину и записываем все, в итоге.
Делаем Update поля State.

2.
Выполняем insertы всех записей со значением State = 0.

Т.е. вы предлагаете как бы не считать insert-ы создающие данные для update ?
А сравнивать только update "неправильных" данных в "правильные" на заполненной таблице с insert-ом сразу "правильных" в пустую таблицу ?
1 дек 14, 17:43    [16932983]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
vi0
Member

Откуда:
Сообщений: 265
a_voronin
Загоните ваши Insert-ы во временную или буфферную таблицу (на 2014 можно и в In-Memory таблицу).
Одной операцией вставьте их в конечную таблицу.
и что это может дать?
1 дек 14, 18:13    [16933216]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
vi0
Member

Откуда:
Сообщений: 265
Glory
Т.е. вы предлагаете как бы не считать insert-ы создающие данные для update ?
А сравнивать только update "неправильных" данных в "правильные" на заполненной таблице с insert-ом сразу "правильных" в пустую таблицу ?
если сравнивать использование всех ресурсов в двух методиках то так некорректно, согласен

Спрошу еще по другому:
Есть описание такой реально используемой методики "вставка, обновление". Можно ли считать такую методику способом избежать большой транзации, путем использование update, а не insert?

Изначально я сформулировал вопрос именно так, потому что другой причины не увидел, для чего нужно именно так создавать записи с нужным статусом.

Может быть причина в другом, буду благодарен если подкините версии
1 дек 14, 18:21    [16933267]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7945
vi0, невозможно сказать - ошибка ли это проектирования, если не знать требования и механизмами выполнения этих требований.
1 дек 14, 18:34    [16933366]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
vi0
a_voronin
Загоните ваши Insert-ы во временную или буфферную таблицу (на 2014 можно и в In-Memory таблицу).
Одной операцией вставьте их в конечную таблицу.
и что это может дать?


1) Вам не придётся оборачивать Insert-ы транзакцией
2) Все либо вставится, либо откатится
3) Такова рекомендованная практика для ETL хранилищ данных
1 дек 14, 19:07    [16933540]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
vi0,
Учитывая что вы толком не написали, что пытаетесь реализовать и зачем вам там вообще явные транзакции, то вот этот вариант будет использовать наименьшее количество ресурсов на транзакцию.
Insert into table1 (Fld1, Fld2, State) Values (‘Customer1’, ‘2012-06-14’, 0)   
Insert into table1 (Fld1, Fld2, State) Values (‘Customer2’, ‘2012-06-15’, 0)  


vi0
как я вижу, в первом случае у UPDATE будет относительно небольшая транзация, т.к. меняется одно поле (так?)
А количество обновляемых строк вас вообще не волнует?
2 дек 14, 00:15    [16934654]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
vi0
Member

Откуда:
Сообщений: 265
a_voronin
1) Вам не придётся оборачивать Insert-ы транзакцией
2) Все либо вставится, либо откатится
3) Такова рекомендованная практика для ETL хранилищ данных
ну по первым пунктам это следствие неявной транзакции, т.е. здесь выигрыша не видено
а по третьему пункту можно ссылку на статью?
2 дек 14, 12:35    [16936526]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
vi0
Member

Откуда:
Сообщений: 265
Mind
Учитывая что вы толком не написали, что пытаетесь реализовать и зачем вам там вообще явные транзакции, то вот этот вариант будет использовать наименьшее количество ресурсов на транзакцию.
Insert into table1 (Fld1, Fld2, State) Values (‘Customer1’, ‘2012-06-14’, 0)   
Insert into table1 (Fld1, Fld2, State) Values (‘Customer2’, ‘2012-06-15’, 0)  
вы предлагаете вставки без транзакции?

Mind
количество обновляемых строк вас вообще не волнует?
волнует. от этого и возник вопрос
2 дек 14, 12:36    [16936549]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
PaulYoung
Member

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

не мучайте вы ни себя, ни сервер. Судя по вопросу, который вы задаёте, вы либо не представляете архитектуру вашего решения, либо не видите разницу между INSERT/UPDATE и INSERT.
2 дек 14, 13:14    [16936916]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7945
вы предлагаете вставки без транзакции?

Вы верите в Insert без транзакции?
2 дек 14, 13:34    [16937113]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
vi0
Member

Откуда:
Сообщений: 265
Владислав Колосов
вы предлагаете вставки без транзакции?

Вы верите в Insert без транзакции?
эту мою фразу нужно понимать видя мой первый пример, и реплику от Mind
2 дек 14, 13:41    [16937170]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
vi0
a_voronin
1) Вам не придётся оборачивать Insert-ы транзакцией
2) Все либо вставится, либо откатится
3) Такова рекомендованная практика для ETL хранилищ данных
ну по первым пунктам это следствие неявной транзакции, т.е. здесь выигрыша не видено
а по третьему пункту можно ссылку на статью?



http://en.wikipedia.org/wiki/Staging_(data)
2 дек 14, 13:52    [16937232]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Буферная область (STAGE)

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

При построении ETL процессов по загрузке данных в буферную область, стараются избежать сложных трансформаций. Поэтому в большинстве случаев структура буферной области, является точной копией загружаемых структур исходной системы.

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


Сведения о каждой загрузке регистрируются в определенных таблицах модуля регистрации хода выполнения ETL процесса, контролируемых средствами ETL инструмента.
2 дек 14, 13:54    [16937246]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7945
Для простой модели восстановления отдельные insert и update могут дать некую экономию журнала транзакций.
2 дек 14, 14:05    [16937333]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
vi0
Mind
Учитывая что вы толком не написали, что пытаетесь реализовать и зачем вам там вообще явные транзакции, то вот этот вариант будет использовать наименьшее количество ресурсов на транзакцию.
Insert into table1 (Fld1, Fld2, State) Values (‘Customer1’, ‘2012-06-14’, 0)   
Insert into table1 (Fld1, Fld2, State) Values (‘Customer2’, ‘2012-06-15’, 0)  
вы предлагаете вставки без транзакции?
А на кой чёрт вам транзакция? Чтобы круто было? Или вы таки озвучите требования?
2 дек 14, 21:19    [16940229]     Ответить | Цитировать Сообщить модератору
 Re: Update vs Множественная вставка  [new]
vi0
Member

Откуда:
Сообщений: 265
коллеги, спасибо за ответы и вопросы
подумать есть над чем
3 дек 14, 18:29    [16945530]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Microsoft SQL Server Ответить