2010-09-28 6 views
1

мне нужно добавить столбец Autonumber в существующую таблицу, которая имеет около 15 миллионов записей в SQL 2005.Добавление Autonumber к SQLcolumn, которая имеет более чем 15 миллионов записей

Как вы думаете, сколько времени это будет брать? Каков лучший способ сделать это?

+1

Я думаю, вы имеете в виду столбец идентичности. Что еще находится в таблице, сколько полей есть и т. Д. И т. Д.? – JNK

+0

Является ли это производственной базой данных? Вы обеспокоены простоями или просто любопытны, сколько времени это займет? – LittleBobbyTables

+0

Да, это столбец идентичности. В этой таблице содержится 40 полей, у него есть первичный ключ (не столбец идентичности, он является обычным) и три внешних ключа и около 15 миллионов записей. – blue

ответ

3

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

create table NewTable (
    NewID int identity(1,1), 
    Column1 ... 
) 
go 

insert into NewTable 
    (Column1, ...) 
    select Column1, ... 
     from OldTable 
go 

drop table OldTable 
go 

exec sp_rename 'NewTable', 'OldTable' 
go 
+0

1 - если вы используете 'WITH (TABLOCK)', в зависимости от вашей версии SQL Server вставка может быть намного быстрее (из-за минимально зарегистрированных операций). 2 - Возможно, вы захотите попробовать это партиями, чтобы предотвратить перебег в tempdb – JNK

+1

Хорошая идея, но я собираюсь восстановить производственный db на сервере разработки и внести изменения и посмотреть, сколько времени это займет. – blue

2

Это действительно сложно сказать, сколько времени это займет.

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

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

2

Если это не чрезвычайная:

  1. Не вносить изменения в реальной базе данных.
  2. Не вносите изменений в базу данных в реальном времени.

Чтобы узнать, сколько времени простоя вам понадобится, выполните восстановление в новую БД и внесите изменения там.

Это не должно быть очень долго: это зависит не только от количества строк, но даже от количества данных в каждой строке. (SQL Server собирается скопировать всю таблицу.)

0

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

Возможно, это будет невозможно, если дисковое пространство ограничено.