Усі речі набувають складності, коли бази даних збільшуються:
- вікна технічного обслуговування потрібно збільшити або перенести
- резервні копії (повна резервна копія в кінці дня стає абсурдною їжею часу, тому вам потрібні диференційні або навіть резервні копії та виконувати повний раз на тиждень, можливо, раз на місяць)
- Виконання вистав стає перебігом часу (створення індексу в багатомільйонній таблиці займає не тривіальний час для виконання) і його потрібно перенести і погіршити, якщо таблиця широка ...
- І передавання того, що резервне копіювання 100Gb через мережу - це не те, що я називаю шматок пирога - особливо якщо мережа (з незрозумілої причини) вперта на перерву підключення на позначці 75Gb ... (сталося з установкою, над якою я працював, робив резервну копію на картографічному диску в мережі - мережі) ...
І які типи даних пов’язані з цим? ВСЕ. Використання розмірів рядків, більших за необхідне, призводить до заповнення сторінок бази даних раніше, ніж потрібно, або навіть витрачання місця, якщо розмір рядка такий, що на сторінці не може бути записано не більше одного запису. Результат - більше сторінок, необхідних для написання та читання, більше пам’яті оперативної пам’яті використовується для кешування, що (для великих записів потрібна більша пам’ять). А оскільки ваші типи даних вказані більше, ніж потрібно на диску, ваші індекси зазнають тієї ж проблеми - особливо, якщо ви кластеризуєте цей первинний ключ з 2 BIGINT стовпців, оскільки будь-які інші створені індекси копіюють цей первинний ключ неявно під їх визначення.
Якщо ви знаєте, що в деяких стовпцях таблиці, що міститимуть мільйони рядків або навіть маленьку таблицю, буде FK'ed багатомільйонний ряд, якому не потрібно 4-байтне ціле число для зберігання своїх даних, але 2-байт буде достатньо - використовуйте SMALLINT . Якщо значень в діапазоні 0-255 достатньо, TINYINT . Прапор так / ні? Є БІТ .