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

Откуда:
Сообщений: 1197
Есть таблица: Продажи - 20 млн записей.
В таблице нет ключей и индексов. Среди прочих есть поле varchar(200) в котором хранится код магазина.
Есть другая таблица в которых данные коды магазинов хранятся уже справочнике + id.

хочу таблицу Продажи добавить столбец КодМагазина - int и сделать его неуникальным некластерным индексом.
После хочу сделать Update, чтобы проставить соотвественно int значения магазинов. Как это сделать быстро? У меня на рабочей машине это занимает 40 минут. Можно как то ускорить?
19 фев 12, 10:50    [12117684]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый Update  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
Что именно занимает 40 минут
19 фев 12, 10:52    [12117687]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый Update  [new]
relief
Member

Откуда:
Сообщений: 1197
Anatoly Podgoretsky
Что именно занимает 40 минут


учитывая что база тестовая у меня на компе, и что данная таблица не имеет связей и ключей, индексов - тупо поля, полагаю что именно update.

если вы про план запроса - то не смотрел.
19 фев 12, 10:57    [12117694]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый Update  [new]
iljy
Member

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

ускорить что? Изменение 20млн записей? Можно конечно - комп поменять надо.
PS Я надеюсь, вы индекс после UPDATE создаете?
19 фев 12, 10:59    [12117701]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый Update  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
relief
Как это сделать быстро?


поэксперементировать с SELECT ... INTO + минимальное протоколирование в новую таблицу, затем старую дропнуть, а новую переименовать!?
19 фев 12, 11:07    [12117714]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый Update  [new]
relief
Member

Откуда:
Сообщений: 1197
iljy
relief,

ускорить что? Изменение 20млн записей? Можно конечно - комп поменять надо.
PS Я надеюсь, вы индекс после UPDATE создаете?


ну т.е. как я и пологал проблемы больше в железе скорей?
а как оценить старость своего компа? сколько считается нормальным временем вставки 10 млн простых интов в пустую таблицу без связей?

да, я хочу создать индекс.
некластерный неуникальный на основании поля ЧисловойКодМагазина - оптимальный вариант?
19 фев 12, 11:09    [12117719]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый Update  [new]
relief
Member

Откуда:
Сообщений: 1197
Knyazev Alexey
relief
Как это сделать быстро?


поэксперементировать с SELECT ... INTO + минимальное протоколирование в новую таблицу, затем старую дропнуть, а новую переименовать!?


хорошая идея попробовать.
а протоколирование как минимизировать? или вы про чтобы я для себя никуда ничего не выводил?
19 фев 12, 11:12    [12117722]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый Update  [new]
iljy
Member

Откуда:
Сообщений: 8711
relief
а протоколирование как минимизировать? или вы про чтобы я для себя никуда ничего не выводил?

Перевести базу в простой режим (ну или BULK_LOGGED)
19 фев 12, 11:15    [12117726]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый Update  [new]
relief
Member

Откуда:
Сообщений: 1197
iljy
relief
а протоколирование как минимизировать? или вы про чтобы я для себя никуда ничего не выводил?

Перевести базу в простой режим (ну или BULK_LOGGED)


подскажите пожалуйста как это?
19 фев 12, 11:26    [12117735]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый Update  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
relief
подскажите пожалуйста как это?


alter database...
19 фев 12, 11:46    [12117757]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый Update  [new]
Grigory Krasnopolskiy
Member

Откуда: Зеленоград
Сообщений: 15
так:

USE master;

ALTER DATABASE database_name SET RECOVERY BULK_LOGGED;

ниже ссылка на источник
http://msdn.microsoft.com/en-us/library/ms190203.aspx
19 фев 12, 12:29    [12117817]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый Update  [new]
relief
Member

Откуда:
Сообщений: 1197
Knyazev Alexey
relief
подскажите пожалуйста как это?


alter database...


Select INTO отработал на отлично.
а как можно сразу сделать индекс при этой команде? чтобы потом сервер не перестраивал ничего
19 фев 12, 13:51    [12117970]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый Update  [new]
iljy
Member

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

не надо ничего делать сразу. Построение индекса по измененным данным (тем более некластерного) пройдет гораздо быстрее, чем изменение данных при имеющемся индексе.
19 фев 12, 13:54    [12117974]     Ответить | Цитировать Сообщить модератору
 Re: Быстрый Update  [new]
relief
Member

Откуда:
Сообщений: 1197
iljy
relief,

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


спасибо!
19 фев 12, 14:41    [12118046]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить