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

Откуда:
Сообщений: 1010
Надо выполнить такое обновление:
UPDATE Fct_0008
SET	IdDim_0100 = ТипыКаналов.ID,
	IdDim_0036 = Каналы.Id,
	IdDim_0031 = Бренды.Id,
	IdDim_0027 = Покупатели.Id,
	IdDim_0038 = ТоргТочка.Id,
	IdDim_0032 = ГруппаТМЦ.Id,
	IdDim_0030 = ТМЦ.Id,
	IdDim_0029Doc = Валюта.ID
FROM Fct_0008
	LEFT OUTER JOIN Dim_0100 AS ТипыКаналов WITH (NOLOCK)
		ON (ТипыКаналов.IdNci_0062 = Fct_0008.IdNci_0062
		AND ТипыКаналов.IdNci_0081 = Fct_0008.IdNci_0081
		AND ТипыКаналов.Id_Real = Fct_0008.IdRealDim_0100)
	LEFT OUTER JOIN Dim_0036 AS Каналы WITH (NOLOCK)
		ON (Каналы.IdNci_0062 = Fct_0008.IdNci_0062
		AND Каналы.IdNci_0081 = Fct_0008.IdNci_0081
		AND Каналы.Id_Real = Fct_0008.IdRealDim_0036)
	LEFT OUTER JOIN Dim_0031 AS Бренды WITH (NOLOCK)
		ON (Бренды.IdNci_0062 = Fct_0008.IdNci_0062
		AND Бренды.IdNci_0081 = Fct_0008.IdNci_0081
		AND Бренды.Id_Real = Fct_0008.IdRealDim_0031)
	LEFT OUTER JOIN Dim_0027 AS Покупатели WITH (NOLOCK)
		ON (Бренды.IdNci_0062 = Fct_0008.IdNci_0062
		AND Бренды.IdNci_0081 = Fct_0008.IdNci_0081
		AND Бренды.Id_Real = Fct_0008.IdRealDim_0027)
	LEFT OUTER JOIN Dim_0038 AS ТоргТочка WITH (NOLOCK)
		ON (ТоргТочка.IdNci_0062 = Fct_0008.IdNci_0062
		AND ТоргТочка.IdNci_0081 = Fct_0008.IdNci_0081
		AND ТоргТочка.Id_Real = Fct_0008.IdRealDim_0038)
	LEFT OUTER JOIN Dim_0032 AS ГруппаТМЦ WITH (NOLOCK)
		ON (ГруппаТМЦ.IdNci_0062 = Fct_0008.IdNci_0062
		AND ГруппаТМЦ.IdNci_0081 = Fct_0008.IdNci_0081
		AND ГруппаТМЦ.Id_Real = Fct_0008.IdRealDim_0032)
	LEFT OUTER JOIN Dim_0030 AS ТМЦ WITH (NOLOCK)
		ON (ТМЦ.IdNci_0062 = Fct_0008.IdNci_0062
		AND ТМЦ.IdNci_0081 = Fct_0008.IdNci_0081
		AND ТМЦ.Id_Real = Fct_0008.IdRealDim_0030)
	LEFT OUTER JOIN Dim_0029 AS Валюта WITH (NOLOCK)
		ON (Валюта.IdNci_0062 = Fct_0008.IdNci_0062
		AND Валюта.IdNci_0081 = Fct_0008.IdNci_0081
		AND Валюта.Id_Real = Fct_0008.IdRealDim_0029Doc)

В таблице около 12 000 000 записей. Таблица Фактов, в ней есть поле DateDoc, думаю по нему сделать шаги. Вопрос по индексам, лучше их отключать, или может какой то новый добавить?
16 ноя 15, 11:15    [18422491]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
Pvase
Member

Откуда:
Сообщений: 1010
Или может обновление делать по каждому полю в отдельном запросе?
16 ноя 15, 11:16    [18422500]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Pvase
Таблица Фактов, в ней есть поле DateDoc, думаю по нему сделать шаги

Какие шаги, если ваш запрос апдейтит все 12млн ?
Все равно их все придется перебрать
16 ноя 15, 11:16    [18422503]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
iap
Member

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

что-то мне кажется, что надо апдейтить порциями.
И только те записи, которые ещё не имеют нужных значений.

А как так получилось, что потребовалось апдейтить всю эту большую таблицу целиком?
Почему в неё не заносились правильные данные сразу?
16 ноя 15, 11:19    [18422527]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
Pvase
Member

Откуда:
Сообщений: 1010
iap
Pvase,

что-то мне кажется, что надо апдейтить порциями.
И только те записи, которые ещё не имеют нужных значений.

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

Эта таблица заполнялась через IIS пакет. Заполнялась как есть данными из баз, при этом сопоставление измерений не выполнялось. После всей закачки такое сопоставление надо выполнить.
Т.е. из жизни, есть 22 базы, из которых грузим все продажи. В продажах есть кому продано, что продано и разные свойства контрагентов, ТМЦ и географии продаж. Но при выгрузке ID заполнялось значениями из клиентских баз, а теперь надо эти значения обновить данные в общей базе, куда сливаются все данные.

Сейчас проверил запрос за 1 месяц, выполнялся 7 минут. Т.е. если данные за за 3 года на 12 месяцев, то получается 252 минуты будет идти такое обновление. А таблиц таких еще штуки шесть, хорошо что можно параллельно запустить для каждой таблицы.
16 ноя 15, 11:31    [18422615]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
таблица заполнялась через apache
Guest
Pvase,

а несколько апдейтов с иннер джойнами?
если справа в объединениях ничего не нашлось, точно надо занулять поля?
или оно не может не найтись?
16 ноя 15, 11:47    [18422742]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8828
Я бы не апдейтил, а создал отдельные таблицы.
Если требуется, можно создать представление, зато обновление будет сводиться к трункейту и вставке.
Плюс, Вы не будете тянуть лишнее, если не нужны все столбцы.
16 ноя 15, 12:01    [18422839]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
zasandator
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 4887
Pvase,

Я бы MERGE вместо UPDATE использовал - помогает (ускоряет когда данных дофига меняешь)
16 ноя 15, 13:53    [18423627]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
zasandator
ускоряет когда данных дофига меняешь
Что, вот прямо замена update на merge драматически увеличивает производительность? Может и пруфлинк есть?
16 ноя 15, 14:17    [18423848]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
zasandator
Pvase,

Я бы MERGE вместо UPDATE использовал - помогает (ускоряет когда данных дофига меняешь)



Это определённо? Для всех случаев?
16 ноя 15, 14:21    [18423885]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
zasandator
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 4887
invm
zasandator
ускоряет когда данных дофига меняешь
Что, вот прямо замена update на merge драматически увеличивает производительность? Может и пруфлинк есть?

Субъективно без линка, неоднократно подкреплено личным опытом.
16 ноя 15, 14:30    [18423939]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Если UPDATEить пачками, например, по 1000 записей, то не будет ли быстрее?
За счёт уменьшения лога транзакции.
UPDATE TOP(1000) Fct_0008
SET	IdDim_0100 = ТипыКаналов.ID,
	IdDim_0036 = Каналы.Id,
	IdDim_0031 = Бренды.Id,
	IdDim_0027 = Покупатели.Id,
	IdDim_0038 = ТоргТочка.Id,
	IdDim_0032 = ГруппаТМЦ.Id,
	IdDim_0030 = ТМЦ.Id,
	IdDim_0029Doc = Валюта.ID
FROM Fct_0008
	LEFT OUTER JOIN Dim_0100 AS ТипыКаналов WITH (NOLOCK)
		ON (ТипыКаналов.IdNci_0062 = Fct_0008.IdNci_0062
		AND ТипыКаналов.IdNci_0081 = Fct_0008.IdNci_0081
		AND ТипыКаналов.Id_Real = Fct_0008.IdRealDim_0100)
	LEFT OUTER JOIN Dim_0036 AS Каналы WITH (NOLOCK)
		ON (Каналы.IdNci_0062 = Fct_0008.IdNci_0062
		AND Каналы.IdNci_0081 = Fct_0008.IdNci_0081
		AND Каналы.Id_Real = Fct_0008.IdRealDim_0036)
	LEFT OUTER JOIN Dim_0031 AS Бренды WITH (NOLOCK)
		ON (Бренды.IdNci_0062 = Fct_0008.IdNci_0062
		AND Бренды.IdNci_0081 = Fct_0008.IdNci_0081
		AND Бренды.Id_Real = Fct_0008.IdRealDim_0031)
	LEFT OUTER JOIN Dim_0027 AS Покупатели WITH (NOLOCK)
		ON (Бренды.IdNci_0062 = Fct_0008.IdNci_0062
		AND Бренды.IdNci_0081 = Fct_0008.IdNci_0081
		AND Бренды.Id_Real = Fct_0008.IdRealDim_0027)
	LEFT OUTER JOIN Dim_0038 AS ТоргТочка WITH (NOLOCK)
		ON (ТоргТочка.IdNci_0062 = Fct_0008.IdNci_0062
		AND ТоргТочка.IdNci_0081 = Fct_0008.IdNci_0081
		AND ТоргТочка.Id_Real = Fct_0008.IdRealDim_0038)
	LEFT OUTER JOIN Dim_0032 AS ГруппаТМЦ WITH (NOLOCK)
		ON (ГруппаТМЦ.IdNci_0062 = Fct_0008.IdNci_0062
		AND ГруппаТМЦ.IdNci_0081 = Fct_0008.IdNci_0081
		AND ГруппаТМЦ.Id_Real = Fct_0008.IdRealDim_0032)
	LEFT OUTER JOIN Dim_0030 AS ТМЦ WITH (NOLOCK)
		ON (ТМЦ.IdNci_0062 = Fct_0008.IdNci_0062
		AND ТМЦ.IdNci_0081 = Fct_0008.IdNci_0081
		AND ТМЦ.Id_Real = Fct_0008.IdRealDim_0030)
	LEFT OUTER JOIN Dim_0029 AS Валюта WITH (NOLOCK)
		ON (Валюта.IdNci_0062 = Fct_0008.IdNci_0062
		AND Валюта.IdNci_0081 = Fct_0008.IdNci_0081
		AND Валюта.Id_Real = Fct_0008.IdRealDim_0029Doc)
WHERE EXISTS
(
 SELECT
  Fct_0008.IdDim_0100,
  Fct_0008.IdDim_0036,
  Fct_0008.IdDim_0031,
  Fct_0008.IdDim_0027,
  Fct_0008.IdDim_0038,
  Fct_0008.IdDim_0032,
  Fct_0008.IdDim_0030,
  Fct_0008.IdDim_0029Doc
 INTERSECT
 SELECT
  ТипыКаналов.ID,
  Каналы.Id,
  Бренды.Id,
  Покупатели.Id,
  ТоргТочка.Id,
  ГруппаТМЦ.Id,
  ТМЦ.Id,
  Валюта.ID
);
16 ноя 15, 14:31    [18423947]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
zasandator
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 4887
zasandator
invm
пропущено...
Что, вот прямо замена update на merge драматически увеличивает производительность? Может и пруфлинк есть?

Субъективно без линка, неоднократно подкреплено личным опытом.

Ну и первый личный пример... Давненько в 2010м году была задача секционировать для того времени большую таблицу, размер которой порядка 300гб был. Запретили перестройку кластерного индекса в схему секционирования - только в новую таблицу.
На тесте гонял. В пт вечером запустил не пачками по 1000-5000 строк, а всю вставку в таблицу INSERT одной командой.
В пн, до конца не доработало, пришлось грохнуть эту БД на тесте и отресторить заново.
Далее попробовал MERGE - прошло за 2 часа!!!

Искал пруфы - не нашел, но для себя выводы сделал...
16 ноя 15, 14:35    [18423978]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
zasandator
Субъективно без линка, неоднократно подкреплено личным опытом.
Ну тогда вы без труда сможете предоставить нам репро.
16 ноя 15, 14:36    [18423989]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Надо же! Цикл забыл:
SELECT @@ROWCOUNT;
WHILE @@ROWCOUNT>0
UPDATE TOP(1000) Fct_0008
SET	IdDim_0100 = ТипыКаналов.ID,
	IdDim_0036 = Каналы.Id,
	IdDim_0031 = Бренды.Id,
	IdDim_0027 = Покупатели.Id,
	IdDim_0038 = ТоргТочка.Id,
	IdDim_0032 = ГруппаТМЦ.Id,
	IdDim_0030 = ТМЦ.Id,
	IdDim_0029Doc = Валюта.ID
FROM Fct_0008
	LEFT OUTER JOIN Dim_0100 AS ТипыКаналов WITH (NOLOCK)
		ON (ТипыКаналов.IdNci_0062 = Fct_0008.IdNci_0062
		AND ТипыКаналов.IdNci_0081 = Fct_0008.IdNci_0081
		AND ТипыКаналов.Id_Real = Fct_0008.IdRealDim_0100)
	LEFT OUTER JOIN Dim_0036 AS Каналы WITH (NOLOCK)
		ON (Каналы.IdNci_0062 = Fct_0008.IdNci_0062
		AND Каналы.IdNci_0081 = Fct_0008.IdNci_0081
		AND Каналы.Id_Real = Fct_0008.IdRealDim_0036)
	LEFT OUTER JOIN Dim_0031 AS Бренды WITH (NOLOCK)
		ON (Бренды.IdNci_0062 = Fct_0008.IdNci_0062
		AND Бренды.IdNci_0081 = Fct_0008.IdNci_0081
		AND Бренды.Id_Real = Fct_0008.IdRealDim_0031)
	LEFT OUTER JOIN Dim_0027 AS Покупатели WITH (NOLOCK)
		ON (Бренды.IdNci_0062 = Fct_0008.IdNci_0062
		AND Бренды.IdNci_0081 = Fct_0008.IdNci_0081
		AND Бренды.Id_Real = Fct_0008.IdRealDim_0027)
	LEFT OUTER JOIN Dim_0038 AS ТоргТочка WITH (NOLOCK)
		ON (ТоргТочка.IdNci_0062 = Fct_0008.IdNci_0062
		AND ТоргТочка.IdNci_0081 = Fct_0008.IdNci_0081
		AND ТоргТочка.Id_Real = Fct_0008.IdRealDim_0038)
	LEFT OUTER JOIN Dim_0032 AS ГруппаТМЦ WITH (NOLOCK)
		ON (ГруппаТМЦ.IdNci_0062 = Fct_0008.IdNci_0062
		AND ГруппаТМЦ.IdNci_0081 = Fct_0008.IdNci_0081
		AND ГруппаТМЦ.Id_Real = Fct_0008.IdRealDim_0032)
	LEFT OUTER JOIN Dim_0030 AS ТМЦ WITH (NOLOCK)
		ON (ТМЦ.IdNci_0062 = Fct_0008.IdNci_0062
		AND ТМЦ.IdNci_0081 = Fct_0008.IdNci_0081
		AND ТМЦ.Id_Real = Fct_0008.IdRealDim_0030)
	LEFT OUTER JOIN Dim_0029 AS Валюта WITH (NOLOCK)
		ON (Валюта.IdNci_0062 = Fct_0008.IdNci_0062
		AND Валюта.IdNci_0081 = Fct_0008.IdNci_0081
		AND Валюта.Id_Real = Fct_0008.IdRealDim_0029Doc)
WHERE EXISTS
(
 SELECT
  Fct_0008.IdDim_0100,
  Fct_0008.IdDim_0036,
  Fct_0008.IdDim_0031,
  Fct_0008.IdDim_0027,
  Fct_0008.IdDim_0038,
  Fct_0008.IdDim_0032,
  Fct_0008.IdDim_0030,
  Fct_0008.IdDim_0029Doc
 INTERSECT
 SELECT
  ТипыКаналов.ID,
  Каналы.Id,
  Бренды.Id,
  Покупатели.Id,
  ТоргТочка.Id,
  ГруппаТМЦ.Id,
  ТМЦ.Id,
  Валюта.ID
);
16 ноя 15, 14:38    [18424000]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
Версия SQL какая? Может Columnstore поможет
16 ноя 15, 16:01    [18424549]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35396
Блог
сделали фигню, а теперь костыли приделываете, чтобы хоть как-то работало...

меняйте подход,
например, можно сделать lookup в упомянутом SSIS-пакете
16 ноя 15, 21:25    [18426328]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
Pvase
Эта таблица заполнялась через IIS пакет. Заполнялась как есть данными из баз, при этом сопоставление измерений не выполнялось. После всей закачки такое сопоставление надо выполнить.
Т.е. из жизни, есть 22 базы, из которых грузим все продажи. В продажах есть кому продано, что продано и разные свойства контрагентов, ТМЦ и географии продаж. Но при выгрузке ID заполнялось значениями из клиентских баз, а теперь надо эти значения обновить данные в общей базе, куда сливаются все данные.

Сейчас проверил запрос за 1 месяц, выполнялся 7 минут. Т.е. если данные за за 3 года на 12 месяцев, то получается 252 минуты будет идти такое обновление. А таблиц таких еще штуки шесть, хорошо что можно параллельно запустить для каждой таблицы.
Может, попробовать вставлять данные в новую таблицу, а не апдэйтить существующую?
16 ноя 15, 21:33    [18426369]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
Okmor
Member

Откуда:
Сообщений: 132
В вашем варианте для каждой записи изменяемой таблицы делается join.
Курите в сторону MERGE. В merge варианте сначала составляется пакет для изменений и только потом скором заливается в таблицу.
Однозначно будет быстрее и в после условие обязательно запретить изменять строки которые не изменят значения.
16 ноя 15, 22:56    [18426704]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Okmor
Курите в сторону MERGE. В merge варианте сначала составляется пакет для изменений и только потом скором заливается в таблицу
Еще один верующий во божественность команды MERGE.
16 ноя 15, 23:03    [18426725]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
Okmor
Member

Откуда:
Сообщений: 132
Mind,
Аргументируйте.
16 ноя 15, 23:05    [18426730]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
Okmor
Member

Откуда:
Сообщений: 132
Чудес не бывает, но merge позволяет проскакивать блокировки. Сначала создаётся предварительный пакет для изменений, и только потом происходит заливка самих изменений. Итого все происходит за меньшее число транзакций. Если учесть, что пакет для отката создаётся один раз, то результат на лицо.
16 ноя 15, 23:14    [18426743]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Okmor,
очень интересная точка зрения.

Okmor
проскакивать блокировки.

Т.е. есть некий злодей, что накладывает блокировки, а супер-герой merge помогает их "проскочить".
Я думаю, что блокировки, это средство обеспечения требуемого уровня изоляции транзакции.
Если merge их как-то "проскакивает", то он нарушает семантику. Репро в студию (таки да, есть репро, где merge косячит, но это не ожидаемое поведение, а ошибка).

Okmor
Сначала создаётся предварительный пакет для изменений, и только потом происходит заливка самих изменений.

Если вынести за скобки терминологию "пакет", "заливка" и т.д. - то видимо, имеется ввиду, что merge, предварительно набирает в write cursor данные и потом их обновляет.

Во первых, это не всегда так, во вторых, тоже самое делают и все операции DML, когда такое требуется - читайте серию Halloween Protection от Paul White - чтение классное, развеет многие мифы!

Okmor
Итого все происходит за меньшее число транзакций.

No comments

Дам просто рекомендацию от себя, можно ей не следовать, как хотите, но подкрепленную мнениями, которые я не могу разглашать, т.к. NDA:
MERGE - мощное, отличное средство для сложных случаев! Не используйте его повсеместно, до тех пор пока не понимаете как оно работает.

Пониманию могут способствовать различные статьи, начать, например с этой от Ицика: MERGE Statement Tips и далее продолжить ссылкой на упомянутый выше блог Пола.

В целом, если кому-то когда-то помог Merge ( субьективно - читал тут на форуме), это не делает его "быстрой" операцией, это просто значит, что план в том конкретном случае был лучше, и план, скорее всего с измененной семнтикой, которая могла и не проявиться.

Резюмируя: каждому инструменту - свое предназначение.
16 ноя 15, 23:40    [18426819]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
Okmor
В вашем варианте для каждой записи изменяемой таблицы делается join.
Забавный вывод.
Okmor
Курите в сторону MERGE. В merge варианте сначала составляется пакет для изменений и только потом скором заливается в таблицу.
Okmor
Чудес не бывает, но merge позволяет проскакивать блокировки. Сначала создаётся предварительный пакет для изменений, и только потом происходит заливка самих изменений. Итого все происходит за меньшее число транзакций. Если учесть, что пакет для отката создаётся один раз, то результат на лицо.
И вы можете продемонстрировать план выполнения, где формируется такой пакет? Заодно дайте ссылку на описание итератора, который ответственен за данную операцию.
Также желательно продемонстрировать пропуск блокировок и число транзакций в одной инструкции merge.
16 ноя 15, 23:47    [18426838]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 Как ускорить UPDATE?  [new]
Okmor
Member

Откуда:
Сообщений: 132
Блокировки никто не отменял, но когда изменения происходят пакетом, вероятность попасть в блокировку уменьшается.
В таких глобальных изменениях как в примере, мне кажется, львиная часть времени уделяется журналу изменений для отката.
В некоторых случаях я использовал временную таблицу. Данные заливаются в временную таблицу, после чего измеряемая таблица очищается без отката. Далее данные из временной таблицы заливаем обратно. Но я не рекомендую такой метод для использования. - Чревато потерей данных.
17 ноя 15, 00:05    [18426882]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить