В SQL Server я должен создать индекс для столбца идентификаторов, или он создается автоматически? - PullRequest
17 голосов
/ 06 декабря 2010

Я считаю, что когда я создаю столбец identity, он индексируется автоматически, но я не уверен на 100%.

Должен ли я создать индекс для столбца identity или он создается автоматически

Ответы [ 3 ]

22 голосов
/ 06 декабря 2010
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 позволяет только один кластеризованный индекс на таблицу.

11 голосов
/ 06 декабря 2010

Если вы создаете столбец с ограничением PRIMARY KEY, кластерный индекс будет создан по умолчанию (при условии, что это новая таблица, и такой индекс еще не определен).

Поле IDENTITY не имеет к этому никакого отношения.

Итак, чтобы ответить на ваш вопрос - если вы собираетесь выполнять запрос / сортировку с этим полем, а оно не является первичным ключом, вам следует определить индекс по нему (практическое правило, всегда проверяйте для своего сценария).

2 голосов
/ 06 декабря 2010

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

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

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