2016-01-15 4 views
1

Пожалуйста, смотрите ниже DDL:Добавление столбца идентификаторов - порядок ID

create table #test (name varchar(10),dateofbirth datetime) 

insert into #test values ('ian', '1976-09-08') 
insert into #test values ('maria', '1976-09-08') 

Я понимаю, что это плохой выбор дизайна не иметь первичный ключ. Я хочу, чтобы добавить новый столбец идентификаторов, как это:

alter table #test add id int identity 

Это работает, как я ожидал бы то Ян имеет идентификатор 1 и Мария имеет идентификатор 2.

Есть 10 миллионов строк в этом Таблица. Могу ли я предположить, что заказ ID будет соответствовать порядку, который они вводили в таблицу? например Ян был введен первым, так что у него есть идентификатор 1. Энн была миллионной строки, так что идентификатор - 1 000 000.

+0

Является ли ваша куча таблицы? Нет кластеризованного индекса? – lad2025

+0

@ lad2025 как указано в вопросе нет PK. Я не проектировал его. – w0051977

+3

Почему имеет значение, что порядок идентичности совпадает с исходным вставленным заказом? И если это не так, как бы вы узнали? – MartW

ответ

2

Порядок, в котором значения IDENTITY присваиваются существующим строкам, не определен. В примере с кучей SQL Server, вероятно, назначит значения в физическом порядке файлов/страниц/слотов, используемых для хранения строк. Если это соответствует порядку вставки, это происходит только случайно, и на него не следует полагаться. Распространение и повторное использование пространства может привести к тому, что физический порядок данных будет отличаться от исходного порядка вставки, а также базы данных с несколькими файлами.

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

Если у вас есть инкрементный столбец для получения порядка вставки, вы можете использовать функцию IDENTITY в запросе SELECT...INTO...ORDER BY для создания новой таблицы со значениями идентификации, назначенными в нужной последовательности. Значения идентичности для новых вставленных строк будут инкрементными в порядке вставки.

Смежные вопросы