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

Откуда:
Сообщений: 284
Коллеги, есть потребность вставки в таблицу записей, чтобы регламентное задание обрабатывало их.
Регламентное задание регулярно обрабатывает записи со статусом = 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

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

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

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

Откуда: Moscow
Сообщений: 37101
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

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

Откуда:
Сообщений: 284
Гавриленко Сергей Алексеевич
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

Откуда:
Сообщений: 11551
а скрипт таблички где?
а если поле 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

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

Откуда:
Сообщений: 284
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

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

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

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

Откуда:
Сообщений: 284
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

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

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

Откуда: Москва
Сообщений: 4806
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

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

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

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

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

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

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

Откуда: Москва
Сообщений: 4806
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]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить