Primary keys в mysql

Табличний движок Innodb має цілу низку нюансів при роботі з первинними ключами (Primary Keys). Знання цих нюансів допоможе ефективніше використовувати ресурси заліза.

кластерні індекси

У Innodb первинний ключ є кластерним. Це означає, що вся запис зберігається разом з цим ключем. Це дозволяє отримати перевагу при читанні по первинному ключу - для отримання всіх даних відбувається тільки одна операція пошуку (lookup).

Таблиці без первинного ключа

У Innodb не може не бути первинного ключа. Якщо ви не вкажете, Mysql зробить це за вас. Спочатку Mysql спробує взяти перший унікальний індекс (UNIQUE INDEX). Якщо не вийде - створить приховану колонку (з 6-ти байт) і призначить її первинним ключем.

послідовна вставка

Innodb зберігає дані в сторінках. При створенні нових записів, сторінка заповнюється майже повністю (залишаючи трохи на можливі майбутнє зміни всередині сторінки). Послідовна вставка (auto increment primary key) забезпечує хорошу заповненість сторінок і, як наслідок, кращу продуктивність вставки і читання.

Первинний ключ і інші індекси

Будь-індекс також зберігає значення первинного ключа. Це дозволяє робити ефективні вибірки первинних ключів при пошуку по іншим індексам без додаткової операції пошуку.

Найважливіше

  • У всіх innodb таблицях завжди повинен бути явно вказано первинний ключ.
  • Первинним ключем повинна бути найменша за розміром колонка. Це заощадить купу місця, тому що значення первинного ключа зберігається в кожному індексі. Якщо вам потрібен smallint, не використовуйте int і т.п.
  • Використовуйте в якості первинного ключа auto_increment колонку - це дозволить значно знизити фрагментацію сторінок і підвищити швидкість запису і читання. Тим більше не варто ставити primary key на кілька колонок. Краще використовувати UNIQUE INDEX + auto_increment колонку для PK.

Primary keys в mysql

матеріали по темі

Схожі статті