Лично я использую INT IDENTITY
для большинства моих первичных и кластерных ключей.
Вам нужно отделить первичный ключ , который является логической конструкцией - он уникально идентифицирует ваши строки,оно должно быть уникальным, стабильным и NOT NULL
.GUID также хорошо работает для первичного ключа - поскольку он гарантированно будет уникальным.GUID в качестве первичного ключа является хорошим выбором, если вы используете репликацию SQL Server, поскольку в этом случае вам все равно необходим уникально идентифицирующий столбец GUID.
ключ кластеризации в SQL Serverфизическая конструкция используется для физического упорядочения данных, и ее намного сложнее понять.Как правило, королева индексирования на SQL Server, Кимберли Трипп, также требует, чтобы хороший ключ кластеризации был уникальным, стабильным, как можно более узким и идеально постоянно увеличивающимся (все из которых INT IDENTITY
).
См. Ее статьи по индексированию здесь:
, а также см.Джимми Нильссон Стоимость GUID в качестве первичного ключа
GUID - ужасно плохой выбор для ключа кластеризации, так как он широкий, абсолютно случайный и, следовательно, приводит к плохой фрагментации индекса и низкой производительности,Кроме того, строки ключей кластеризации также хранятся в каждой записи каждого некластеризованного (дополнительного) индекса, так что вы действительно хотите сохранить его небольшим - GUID равен 16 байтам, тогда как INT равен 4 байтам, ис несколькими некластеризованными индексами и несколькими миллионами строк это делает ОГРОМНОЕ различие.
В SQL Server ваш первичный ключ по умолчанию является вашим ключом кластеризации, но это не обязательно.Вы можете легко использовать GUID в качестве первичного ключа, не относящегося к кластеру, и INT IDENTITY
в качестве ключа кластеризации - вам просто нужно знать об этом.