Сколько времени занимает создание столбца идентификации? - PullRequest
4 голосов
/ 20 августа 2009

У меня есть таблица с 40 миллионами записей.

Что лучше (быстрее)? Создать столбец непосредственно в этой таблице или создать другую таблицу со столбцом идентификаторов и вставить данные сначала?

Если я создаю в таблице столбец идентификаторов, содержащий 40 миллионов записей, можно ли оценить, сколько времени потребуется для его создания?

Ответы [ 6 ]

2 голосов
/ 20 августа 2009

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

1 голос
/ 20 августа 2009

Я предполагаю, что он заблокирован - вы использовали графический интерфейс или окно запроса (вы знаете, под каким SPID он работает?)

Попробуйте это - дайте нам знать, если они дают результаты, и вы не уверены, что делать:

USE master

SELECT * FROM sysprocesses WHERE blocked <> 0

SELECT * FROM sysprocesses WHERE status = 'runnable' AND spid <> @@SPID
0 голосов
/ 20 августа 2009

Если вы использовали ALTER TABLE [...] ADD ... в окне запроса, это довольно быстро, на самом деле это было бы давно. Если вы использовали конструктор таблиц Management Studio, он копирует таблицу в новую таблицу, удаляя старую, а затем переименовывает новую таблицу в старую. Это займет некоторое время, особенно если вы предварительно не увеличили базу данных и журнал для размещения необходимого дополнительного пространства. Поскольку это все одна транзакция, откат займет около 16 часов, если вы остановите ее сейчас.

0 голосов
/ 20 августа 2009

Я думаю, что многое зависит от оборудования и от того, в какой СУБД вы находитесь. В моей среде создание новой таблицы и копирование в нее старых данных займет около 3 или 4 часов. Я ожидаю, что добавление столбца идентификаторов займет примерно столько же времени, только исходя из других событий. Я использую Oracle с несколькими серверами в сети SAN, поэтому все может работать быстрее, чем в среде с одним сервером. Возможно, вам просто придется сесть и ждать.

0 голосов
/ 20 августа 2009

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

0 голосов
/ 20 августа 2009

Разве это не то, что вам придется делать только один раз, и, следовательно, не проблема, сколько времени это займет? (Предполагая, что это не займет дней ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...