BIGINT
, вероятно, самый безопасный, но для данной сущности вы должны использовать наибольшее необходимое число, а не стандартизировать наибольшее возможное число для всех сущностей.
Для столбца IDENTITY
в таблице Employees
, например, BIGINT
может быть просто излишним. У вас будет более 2 миллиардов сотрудников, или вы напишите код, который пытается создать сотрудника 2 миллиарда раз, но каждый раз не работает и откатывается? Возможно, SMALLINT
- это хорошо (32 000+), если вы не имеете дело с очень большой компанией.
Для других таблиц, где вы просто не знаете, сколько строк вы получите, опять же, BIGINT
, вероятно, самый безопасный. Я хотел бы надеяться, что у вас будет какая-то идея, основанная на сущности и бизнесе, чтобы можно было объединить таблицу либо в корзину «может получить> 2 миллиарда строк», либо в корзину «точно не получит> 2 миллиарда строк» , Что касается последнего, вы можете разбить его дальше, если хотите. Я видел много систем с небольшими поисковыми таблицами, в которых IDENTITY
был определен как SMALLINT
или даже TINYINT
- для тех размеров, которые я бы предпочел просто стандартизировать на INT
. Личные предпочтения, например, использование CHAR
для строк, которые могут различаться по размеру, но всегда будут <5 символов. </p>
A BIGINT
- 8 байтов, INT
- 4 байта. Это только вдвое больше, но это может стать большим фактором производительности для больших таблиц, в зависимости от структуры индекса, количества строк на странице, частоты удаления и множества других факторов. К сожалению, самые большие таблицы, где это действительно вступает в игру, также являются теми, которые, вероятно, требуют вероятности того, что они получат> 2 миллиарда значений.
BIGINT
доступно в SQL Server 2000.