Имея лишь небольшую информацию, которую вы предоставили, я бы порекомендовал использовать BigInt , который принесет вам до 9 223 372 036 854 775 807, число, которое вы вряд ли когда-либо превысите. (Не начинайте с INT и думайте, что вы можете легко изменить его на BigInt, когда вы превысите 2 миллиарда строк. Это возможно (я это сделал), но это может занять очень много времени и привести к значительным сбоям в работе системы.)
У Кимберли Триппа есть отличная серия статей в блогах ( GUID в качестве ПЕРВИЧНЫХ КЛЮЧЕЙ и / или ключа кластеризации и Дебаты по кластерному индексу продолжаются ) по вопросу создания кластеризованных индексов и выбора первичного ключа (связанные проблемы, но не всегда точно такие же). Она рекомендует, чтобы кластерный индекс / первичный ключ был:
- Уникальный (в противном случае он бесполезен в качестве ключа)
- Узкий (ключ используется во всех некластеризованных индексах и в отношениях внешнего ключа)
- Статический (вам не нужно изменять все связанные записи)
- Всегда увеличивается (поэтому новые записи всегда добавляются в конец таблицы, и их не нужно вставлять в середину)
Если вы используете BigInt в качестве растущей идентичности в качестве своего ключа и своего кластерного индекса, это должно удовлетворять всем четырем из этих требований.
Редактировать: статья Кимберли, о которой я упоминал выше ( GUID в качестве ПЕРВИЧНЫХ КЛЮЧЕЙ и / или ключа кластеризации ), говорит о том, почему (сгенерированный клиентом) GUID является плохим выбором для кластеризации ключ:
Но GUID, который не является последовательным -
как тот, который имеет свои ценности
генерируется в клиенте (с использованием .NET)
ИЛИ, сгенерированный функцией newid ()
(в SQL Server) может быть ужасно плохо
выбор - в первую очередь из-за
фрагментация, которую он создает в
базовый стол, но и из-за его
размер. Это излишне широкий (это 4
в разы шире, чем основанная на Int идентичность
- который может дать вам 2 миллиарда (на самом деле, 4 миллиарда) уникальных строк). А также,
если вам нужно более 2 миллиардов
всегда можно пойти с большой буквы (8 байт
int) и получите 263-1 строки.
В SQL есть функция NEWSEQUENTIALID (), которая позволяет генерировать последовательные идентификаторы GUID, позволяющие избежать проблемы фрагментации, но при этом они по-прежнему сталкиваются с проблемой ненужной ширины.