Тип данных Sql для первичного ключа - SQL Server?

>>> from datetime import date, timedelta
>>> yesterday = date.today() - timedelta(1)
>>> print yesterday.strftime('%m%d%y')
'110909'
40
задан Kevin Fairchild 15 November 2008 в 03:54
поделиться

5 ответов

Обычно int.

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

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

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

52
ответ дан Ken Gentle 4 August 2019 в 22:54
поделиться

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

0
ответ дан dkretz 4 August 2019 в 22:54
поделиться

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

2
ответ дан stephbu 4 August 2019 в 22:54
поделиться

Действительно необходимо держать два отдельных вопроса отдельно:

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

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

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

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

Marc

21
ответ дан marc_s 4 August 2019 в 22:54
поделиться

unsigned int из каких бы ни размер, который удовлетворяет Ваши конкретные потребности

0
ответ дан Joe Phillips 4 August 2019 в 22:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: