Все становится сложнее, когда базы данных становятся больше:
- окна обслуживания должны быть увеличены или перенесены
- резервное копирование (полное резервное копирование на конец дня становится абсурдным пожирателем времени, поэтому вам нужно делать разностные или даже журнальные резервные копии и выполнять полное резервирование раз в неделю, может, раз в месяц)
- показатели производительности становятся затратами времени (создание индекса для таблицы с многомиллионными строками занимает не тривиальное время), его необходимо перенести и ухудшить, если таблица широкая ...
- И передача этой резервной копии 100 Гбит через сеть - это не то, что я называю легкой задачей - особенно если сеть (по неизвестной причине) упряма при разрыве соединения на отметке 75 ГБ ... (произошло с установкой, на которой я работал, что было резервное копирование на подключенный диск в сети - сети) ...
И какие типы данных имеют к этому отношение? ВСЕ. Использование размеров строк, превышающих необходимые, приводит к тому, что страницы базы данных заполняются раньше, чем необходимо, или даже тратят пространство, если размер строки таков, что на странице может быть записано не более одной записи. В результате для записи и чтения требуется больше страниц, для кеширования используется больше оперативной памяти (для больших записей требуется больше памяти). И так как ваши типы данных определены больше, чем необходимо для диска, ваши индексы будут страдать от той же проблемы - особенно если вы кластеризуете этот составной первичный ключ 2 столбцов BIGINT, так как любые другие созданные индексы будут неявно копировать этот первичный ключ при их определении.
Если вы знаете, что некоторые столбцы в таблице содержат миллионы строк или даже небольшую таблицу, которая будет преобразована в FK в многомиллионную строку, для которой не нужно 4-байтовое целое число для хранения своих данных, но 2-байтовый будет достаточно - используйте SMALLINT . Если значений в диапазоне 0-255 достаточно, TINYINT . Флаг Да / Нет? Там БИТ .