Первичный ключ таблиц SQL - PullRequest
1 голос
/ 01 ноября 2011

какой лучше использовать Guid или Int Primary Key? некоторые результаты поиска предпочитают Guid, а другие - Int. так каковы на самом деле плюсы и минусы каждого.

Ответы [ 2 ]

2 голосов
/ 01 ноября 2011

Для SQL Server я лично использую INT IDENTITY для большинства моих первичных ключей и ключей кластеризации.

Вам необходимо отделить первичный ключ , который является логической конструкцией - он уникаленопределяет ваши строки, он должен быть уникальным и стабильным и NOT NULL.GUID хорошо работает и для первичного ключа - поскольку он гарантированно будет уникальным.GUID в качестве первичного ключа является хорошим выбором, если вы используете репликацию SQL Server, поскольку в этом случае вам все равно необходим уникально идентифицирующий столбец GUID.

ключ кластеризации в SQLСервер - это физическая конструкция, используемая для физического упорядочения данных, и его намного сложнее понять.Как правило, Королева индексирования на SQL Server, Кимберли Трипп, также требует, чтобы хороший ключ кластеризации был уникальным, стабильным, как можно более узким и в идеальном случае постоянно увеличивающимся (каковым является INT IDENTITY).

См. Ее статьи об индексации здесь:

, а также см. Джимми Нильссона Стоимость GUID в качестве первичного ключа

GUID - этодействительно плохой выбор для ключа кластеризации, так как он широкий, абсолютно случайный и, следовательно, приводит к плохой фрагментации индекса и низкой производительностиКроме того, строки ключей кластеризации также хранятся в каждой записи каждого некластеризованного (дополнительного) индекса, поэтому вы действительно хотите сохранить его небольшим - GUID равно 16 байтам, а INT равно4 байта, с несколькими некластеризованными индексами и несколькими миллионами строк, это имеет ОГРОМНОЕ различие.

В SQL Server ваш первичный ключ по умолчанию является вашим ключом кластеризации - но это не обязательно.Вы можете легко использовать GUID в качестве первичного ключа, не относящегося к кластеру, и INT IDENTITY в качестве ключа кластеризации - вам просто нужно знать об этом.

1 голос
/ 01 ноября 2011

Поскольку целочисленные первичные ключи являются последовательными (при условии автоинкремента), будет проще записать строки в БД.Идентификаторы GUID являются по существу случайными, поэтому вставка строки может вызвать разбиение страницы и снизить скорость вставки.Если вы действительно хотите использовать GUID в качестве PK, рассмотрите функцию newsequentialid, которая гарантирует, что GUID создаются в порядке.

...