В SQL Server следует создать индекс для столбца идентификации или создать его автоматически?
Я считаю, что при создании столбца identity
он автоматически индексируется, но я не уверен на 100%.
Создать индекс для столбца identity
или создать его автоматически?
Ответы
Ответ 1
create table test (Id int identity)
go
sp_help test
The object 'test' does not have any indexes, or you do not have permissions.
No constraints are defined on object 'test', or you do not have permissions.
В качестве общей практики вы должны создать уникальный индекс в столбце идентификации, что ускорит поиск.
Обычно вы хотели бы, чтобы ваши идентификационные столбцы также были "кластеризованными индексами" (Id int identity primary key
- это обозначение ярлыка), то есть таблица выкладывается на диск в том же порядке, что и ваш столбец идентичности. Это оптимизируется для вставок, поскольку вставляемая страница имеет тенденцию находиться в памяти. В некоторых случаях, когда вы часто выполняете поиск по диапазону на других данных в таблице, вы можете вместо этого кластеризовать другие столбцы, поскольку SQL Server позволяет только один кластерный индекс для каждой таблицы.
Ответ 2
Если вы создадите столбец с ограничением PRIMARY KEY
, кластерный индекс будет создан по умолчанию (если это новая таблица, и этот индекс уже не определен).
Будучи полем IDENTITY
не имеет к этому отношения.
Итак, чтобы ответить на ваш вопрос - если вы собираетесь запрашивать/сортировать с этим полем и не являетесь первичным ключом, вам следует определить индекс на нем (эмпирическое правило, всегда проверяйте ваш сценарий).
Ответ 3
По умолчанию ваш первичный (ые) столбец (ов) основного ключа будет внесен в кластеризованный индекс; это специальный индекс, который не отделен от данных, - но вместо этого данные упорядочиваются в таблице по этим значениям индексов.
Я говорю "по умолчанию", потому что вы можете изменить кластеризованный индекс на другое поле, если хотите. Если вы выбрали хорошее значение для своего первичного ключа, вы почти никогда не захотите это изменить.