Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 навесить PRIMARY KEY после заполнения таблицы  [new]
vopros99
Guest
наверное уже 100 раз обсуждалось, но не знаю, на какую фразу искать.
мне пожаловались на медленную процедуру.
в ней каждую ночь заливаются данные в таблицы порядка 50000000 строк по сценарию
truncate table T...insert into T select

на каждой таблице есть только PK, clustered, индексов нет.
спрашивается, почему не делать каждый раз
drop table T...select <> into T...alter table T add constraint
?
так отрабатывает в 2 раза быстрее, но по каким-то соображениям автор процедуры не пересоздавал таблицу,
только его уже не спросить, давно тут не работает.
какие тут могут быть причины, и можно ли мне переделать index в nonclustered для PK?
2 мар 12, 17:50    [12185432]     Ответить | Цитировать Сообщить модератору
 Re: навесить PRIMARY KEY после заполнения таблицы  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
vopros99,

а вы сравните планы при разных индексах и будет понятно можно поменять или нет
все зависит от того ккк потом используются эти милионы записей
2 мар 12, 17:57    [12185483]     Ответить | Цитировать Сообщить модератору
 Re: навесить PRIMARY KEY после заполнения таблицы  [new]
vopros99
Guest
WarAnt,
сравнивать планы чего?
у меня нет запросов, которые будут делать к этой таблице.
равно как нет ALTER TRACE, чтоб их отлавливать.
таблица служит для построения каких-то отчетов,
за хранилище отвечаем мы, а используем не мы...
мое дело - уложиться по времени и за ночь все это добро залить,
чтоб утром могли строить свои отчеты.
я бы всех дропнула а ключи потом пересоздала.
раз других индексов нет, то видимо отчетников все устраивает...
2 мар 12, 18:04    [12185523]     Ответить | Цитировать Сообщить модератору
 Re: навесить PRIMARY KEY после заполнения таблицы  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
vopros99
мое дело - уложиться по времени и за ночь все это добро залить,
чтоб утром могли строить свои отчеты.
Ну так зафигачьте в текстовый файл, пусть мучаются те, кто отчеты стоит, ага.
2 мар 12, 20:29    [12186163]     Ответить | Цитировать Сообщить модератору
 Re: навесить PRIMARY KEY после заполнения таблицы  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
Судя по тому что Вы описали сам подход какй-то нестандартный. Обычно заливают то что изменилось, а у Вас похоже чохом ВСЕ каждый день. Возможно пора пересмотреть сам подход?
А что если будет в 3 раза больше записей?
5 мар 12, 10:42    [12193816]     Ответить | Цитировать Сообщить модератору
 Re: навесить PRIMARY KEY после заполнения таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
vopros99
спрашивается, почему не делать каждый раз
drop table T...select <> into T...alter table T add constraint

?
так отрабатывает в 2 раза быстрее, но по каким-то соображениям автор процедуры не пересоздавал таблицу,
Разные могуть быть причины - не сообразил, ссылки навешаны от других таблиц...

А вообще нормальный подход создавать индексы после загрузки.

vopros99
можно ли мне переделать index в nonclustered для PK?
Зависит от запросов к этой таблице - загрузка то будет быстрее, но запросы могут стать медленнее.

Кудряшка
Судя по тому что Вы описали сам подход какй-то нестандартный. Обычно заливают то что изменилось
Если при загрузке меняется много записей, допустим процентов 20 или больше, то удалить и загрузить может быть и быстрее.

Для всяких хранилищ общепринятый подход.

Разумеется, если перезагружается блок данных, который можно как то логически отделить, то ещё лучше использовать секционирование.
5 мар 12, 10:54    [12193913]     Ответить | Цитировать Сообщить модератору
 Re: навесить PRIMARY KEY после заполнения таблицы  [new]
vopros99
Guest
alexeyvg,

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

ссылок с других таблиц нет, все спокойно дропается.

Гавриленко Сергей Алексеевич ,

издеваетесь даже не Вы, издевательский подход в принципе.
мне не дают доступ к трэйсу,
боевой сервер я не вижу вообще,
на тестовом запросов к этой таблице нет,
тестовый сервер дан для экспериментов по загрузке (по крайней мере в этой базе.
а ALTER TRACE не дают под предлогом, что он уровня сервера).
и сказано, что наше дело грузить, а запросы дело не наше, и чтоб я не лезла.
так что мне как раз самой только и остается что предложить, ага, давайте в txt все и выгружу
5 мар 12, 11:28    [12194244]     Ответить | Цитировать Сообщить модератору
 Re: навесить PRIMARY KEY после заполнения таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
vopros99
то, что каждый день затирается и перезаливается, это данные да 1 день.
Ну тогда создать заново таблицу и делать индекс после загрузки - это просто стандартный подход, так и надо делать.

vopros99
а ALTER TRACE не дают под предлогом, что он уровня сервера).
и сказано, что наше дело грузить, а запросы дело не наше, и чтоб я не лезла.
В принципе структурой таблицы занимаются другие люди, они за это и отвечают. А вы тогда просто можете сосредоточиться на загрузке секции, тогда можно запросы и не смотреть, они на загрузку не влияют...

Хотя всё равно неправильный подход.
5 мар 12, 11:34    [12194317]     Ответить | Цитировать Сообщить модератору
 Re: навесить PRIMARY KEY после заполнения таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
alexeyvg
vopros99
то, что каждый день затирается и перезаливается, это данные да 1 день.
Ну тогда создать заново таблицу и делать индекс после загрузки - это просто стандартный подход, так и надо делать.
И тогда в общем не нужно экспериментов с некластерным индексом - построение даже кластерного индекса для секции будет делаться быстро, если конечно он влезает в память.
5 мар 12, 11:35    [12194331]     Ответить | Цитировать Сообщить модератору
 Re: навесить PRIMARY KEY после заполнения таблицы  [new]
vopros99
Guest
alexeyvg,
спасибо!
5 мар 12, 11:48    [12194446]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить