В SQL Server следует ли создавать индекс для столбца идентификаторов или он создается автоматически?
Я считаю, что при создании столбца identity
он индексируется автоматически, но я не уверен на 100%.
Должен ли я создать индекс для столбца identity
, или он создается автоматически?
3 ответа:
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 позволяет использовать только один кластеризованный индекс для каждой таблицы.
Если вы создадите столбец с ограничением
PRIMARY KEY
, кластеризованный индекс будет создан по умолчанию (при условии, что это новая таблица и такой индекс еще не определен).Быть полем
IDENTITY
не имеет к нему никакого отношения.Итак, чтобы ответить на ваш вопрос - если вы собираетесь выполнить запрос / сортировку с этим полем, и оно не является первичным ключом, вы должны определить индекс на нем (эмпирическое правило, всегда тестируемое для вашего сценария).
По умолчанию столбцы первичного ключа будут преобразованы в кластеризованный индекс; это специальный индекс, который не отделен от данных , но вместо этого данные упорядочиваются в таблице по значениям этих индексов.
Я говорю "по умолчанию", потому что вы можете изменить кластеризованный индекс на другое поле, если хотите. Если вы выбрали хорошее значение идентификатора для вашего первичного ключа, вы почти никогда не захотите изменить его.