Тип данных SQL для первичного ключа - SQL Server? - PullRequest
39 голосов
/ 01 ноября 2008

Какой тип данных sql следует использовать для первичного ключа для баз чисел:

  1. INT
  2. BIGINT
  3. цифровая
  4. поплавок

Ответы [ 6 ]

52 голосов
/ 01 ноября 2008

Обычно int.

bigint если вы думаете, что у вас будет больше строк, чем атомов во вселенной.

uniqueidentifier полезно, если вам нужно глобально уникальные ключи (ключи, которые гарантированно будут уникальными для всех таблиц в вашей схеме, возможно, даже универсально уникальными (я не помню))

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

20 голосов
/ 29 января 2009

Вам действительно нужно разделить две отдельные проблемы:

1) первичный ключ является логической конструкцией - одним из ключевых кандидатов, который уникальным и надежным образом идентифицирует строку в вашей таблице. На самом деле это может быть что угодно - INT, GUID, строка - выберите то, что наиболее подходит для вашего сценария.

2) ключ кластеризации (столбец или столбцы, которые определяют «кластеризованный индекс» в таблице) - это физическая вещь, связанная с хранилищем, и здесь маленький, стабильный, постоянно растущий тип данных - ваш лучший выбор - INT или BIGINT в качестве варианта по умолчанию.

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

Фрагментация индекса снизилась до минимальных уровней, и, таким образом, производительность поиска индекса была повышена - настоятельно рекомендуется!

Марк

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

Одной из огромных причин не использовать GUID для PK является их ужасный коэффициент заполнения для страниц индекса - такое неправильное использование может значительно увеличить ваши затраты производительности ввода-вывода. Идентификаторы GUID должны быть оставлены как AK и вместо этого направлять запросы везде, где это возможно, с производными от int PK.

0 голосов
/ 05 апреля 2019

GUID / UUID - лучшие типы полей для уникального первичного ключа таблицы.

0 голосов
/ 29 января 2009

unsigned int любого размера, соответствующего вашим потребностям

0 голосов
/ 01 ноября 2008

для 32-разрядных процессоров, int, вероятно, будет наиболее эффективным размером для обработки.

...