Формат строк InnoDB COMPACT
В MariaDB 10.2.1 и ранее, по умолчанию используется формат строк COMPACT.
Формат строк COMPACT похож на формат строк REDUNDANT, но он хранит данные более компактно, что требует примерно на 20% меньше места.
Использование формата строк COMPACT
В MariaDB 10.2.2 и более поздних версиях, самый простой способ создать таблицу InnoDB, использующую формат строк COMPACT, — установить опцию таблицы ROW_FORMAT на значение COMPACT в операторе CREATE TABLE или ALTER TABLE.
Рекомендуется установить системную переменную innodb_strict_mode на значение ON при использовании этого формата строк.
Формат строк COMPACT поддерживается как форматом файлов Antelope, так и форматом файлов Barracuda, поэтому таблицы с этим форматом строк могут быть созданы независимо от значения системной переменной innodb_file_format.
Например:
SET SESSION innodb_strict_mode=ON; CREATE TABLE tab ( id int, str varchar(50) ) ENGINE=InnoDB ROW_FORMAT=COMPACT;
В MariaDB 10.2.1 и ранее по умолчанию используется формат строк COMPACT. Поэтому в этих версиях самый простой способ создать таблицу InnoDB, использующую формат строк COMPACT, — не устанавливать опцию таблицы ROW_FORMAT вообще в операторе CREATE TABLE или ALTER TABLE.
Рекомендуется установить системную переменную innodb_strict_mode на значение ON при использовании этого формата строк.
Формат строк COMPACT поддерживается как форматом файлов Antelope, так и форматом файлов Barracuda, поэтому таблицы с этим форматом строк могут быть созданы независимо от значения системной переменной innodb_file_format.
Например:
SET SESSION innodb_strict_mode=ON; CREATE TABLE tab ( id int, str varchar(50) ) ENGINE=InnoDB;
Префиксы индексов с форматом строк COMPACT
Формат строк COMPACT поддерживает префиксы индексов до 767 байт.
Страницы переполнения с форматом строк COMPACT
Все форматы строк InnoDB могут хранить некоторые типы данных на страницах переполнения. Это позволяет максимальному размеру строки в таблице InnoDB быть больше, чем максимальному объёму данных, который может быть храним на основной странице данных строки. Смотрите Максимальный размер строки для получения дополнительной информации о других факторах, которые могут повлиять на максимальный размер строки в таблицах InnoDB.
В формате строк COMPACT переменные колонки, такие как колонки с типами данных VARBINARY, VARCHAR, BLOB и TEXT, могут быть частично сохранены на страницах переполнения.
InnoDB рассматривает использование страниц переполнения только в том случае, если размер строки таблицы больше половины значения innodb_page_size. Если размер строки больше этого значения, то InnoDB выбирает переменные колонки для хранения на страницах переполнения, пока размер строки не станет меньше половины значения innodb_page_size.
Для колонок VARBINARY, VARCHAR, BLOB и TEXT только значения, длина которых больше 767 байт, учитываются для хранения на страницах переполнения. Байты, хранящие информацию о длине значения, не учитываются в этом ограничении. Это ограничение основано только на длине фактических данных колонки.
Колонки с фиксированной длиной, превышающие 767 байт, кодируются как колонки переменной длины, поэтому они также могут храниться на страницах переполнения, если размер строки таблицы больше половины значения innodb_page_size. Несмотря на то, что колонка с типом данных CHAR может содержать максимум 255 символов, колонка CHAR может всё ещё превышать 767 байт в некоторых случаях. Например, колонка char(255) может превышать 767 байт, если набор символов — utf8mb4.
Если колонка выбрана для хранения на страницах переполнения, то первые 767 байт значения колонки и 20-байтовый указатель на первую страницу переполнения колонки хранятся на основной странице. Каждая страница переполнения имеет размер innodb_page_size. Если колонка слишком велика для хранения на одной странице переполнения, она хранится на нескольких страницах переполнения. Каждая страница переполнения содержит часть данных и 20-байтовый указатель на следующую страницу переполнения, если она существует.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/innodb-compact-row-format/