2013-03-01 3 views
3

У меня вопрос, что мы должны использовать либо Int/GUID в таблице. Используйте этот сценарий.SQL SERVER - INT Vs GUID -wht мы должны использовать

Использовать BIGINT как первичный ключ - кластерный и т. Д., Для объединения, быстрого поиска и т. Д., Т. Е. Оптимизирован для поиска и удобства пользователя.

У вас есть GUID как ваш уникальный маркер для записи, это то, что вы используете при переносе данных по серверам/приложениям и т. Д. Это никогда не будет отображаться для пользователей, но будет прикреплено к всем записям.

Это дает вам лучшее из обоих миров, вы избегаете фрагментации и производительности при использовании GUIDs в качестве первичного ключа, но сохраняете свою выгоду, когда ваши движущиеся данные передают между системами, так как вы можете самостоятельно идентифицировать запись.

Некоторые могут утверждать, что дополнительные затраты на хранение чрезмерны, но я бы сказал, что потратить несколько долларов больше на вашу SAN дешевле в долгосрочной перспективе, чем пытаться сделать две разные вещи с одним и тем же столбцом данных.

ответ

8

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

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

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

Смотрите свои статьи на индексацию здесь:

, а также увидеть Джимми Нильссон The Cost of GUIDs as Primary Key

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

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

Смежные вопросы