ОК, давайте сделаем быстрый математический обзор:
INT является 32-битным и дает вам в основном 4 миллиарда значений - если считать только значения больше нуля, это все равно 2 миллиарда. У вас так много сотрудников? Клиенты? Продукты на складе? Заказы за всю жизнь вашей компании? ДЕЙСТВИТЕЛЬНО?
BIGINT идет намного дальше. Вы действительно нуждаетесь в этом ?? действительно ?? Если вы астроном или физик элементарных частиц - возможно. Средний бизнес-пользователь? Я сильно сомневаюсь в этом
Представьте, что у вас есть таблица, скажем, с 10 миллионами строк (заказы для вашей компании). Допустим, у вас есть таблица Orders, и на этот OrderID, который вы создали BIGINT, ссылаются 5 других таблиц, и он используется в 5 некластеризованных индексах в вашей таблице Orders - я думаю, не преувеличено, верно?
10 миллионов строк, 5 таблиц плюс 5 некластеризованных индексов, это 100 миллионов случаев, когда вы используете 8 байтов каждая вместо 4 байтов - 400 миллионов байтов = 400 МБ. Полная трата ... вам потребуется больше данных и страниц индекса, вашему SQL Server придется читать больше страниц с диска и кэшировать больше страниц ... это не выгодно для вашей производительности - просто и просто.
ПЛЮС: О чем большинство программистов не думают: да, дисковое пространство это очень дешево. Но это потраченное впустую пространство также имеет отношение к вашей оперативной памяти SQL Server и кешу вашей базы данных - и это пространство не так уж дешево!
Итак, чтобы сделать очень длинный пост коротким: используйте наименьший тип INT, который действительно соответствует вашим потребностям; если у вас есть 10-20 различных значений для обработки - используйте TINYINT. Если вам нужен стол заказов, я считаю, что INT должно быть PLENTY ENOUGH - BIGINT - это пустая трата пространства.
Плюс: если какая-либо из ваших таблиц действительно когда-нибудь приблизится к достижению 2 или 4 миллиардов строк, у вас все равно будет достаточно времени, чтобы обновить свою таблицу до BIGINT ID, если это действительно необходимо .......