Spec-Zone.ru › MySQL 5.7

8.5.1 Оптимизация структуры хранения данных для таблиц InnoDB

  • После того, как ваши данные достигли стабильного размера или растущая таблица увеличилась на десятки или сотни мегабайт, рассмотрите использование оператора OPTIMIZE TABLE для переустановки таблицы и сжатия неиспользуемого пространства. Переустановленные таблицы требуют меньше ввода-вывода на диск для выполнения полного сканирования таблицы. Это простой метод, который может улучшить производительность, когда другие методы, такие как улучшение использования индексов или настройка кода приложения, не являются практичными.

    OPTIMIZE TABLE копирует часть данных таблицы и перестраивает индексы. Преимущества заключаются в улучшенном размещении данных в индексах и уменьшении фрагментации в пространствах таблиц и на диске. Преимущества зависят от данных в каждой таблице. Вы можете обнаружить значительные улучшения для некоторых таблиц и отсутствие улучшений для других, или улучшения могут со временем уменьшиться до следующей оптимизации таблицы. Эта операция может быть медленной, если таблица большая или перестраиваемые индексы не помещаются в пул буфера. Первый запуск после добавления большого количества данных в таблицу часто намного медленнее, чем последующие запуски.

  • В InnoDB наличие длинного PRIMARY KEY (либо одного столбца с длинным значением, либо нескольких столбцов, образующих длинное составное значение) приводит к большому расходу дискового пространства. Значение первичного ключа строки дублируется во всех записях вторичных индексов, указывающих на одну и ту же строку. (См. Раздел 14.6.2.1, «Кластеризованные и вторичные индексы».) Создайте столбец AUTO_INCREMENT в качестве первичного ключа, если ваш первичный ключ длинный, или индексируйте префикс длинного столбца VARCHAR вместо всего столбца.

  • Используйте тип данных VARCHAR вместо CHAR для хранения строк переменной длины или столбцов со многими NULL значениями. Столбец CHAR(N) всегда занимает N символов для хранения данных, даже если строка короче или ее значение NULL. Более мелкие таблицы лучше подходят для пула буфера и уменьшают ввод-вывод на диск.

    При использовании формата строк COMPACT (по умолчанию InnoDB формат) и наборов символов переменной длины, таких как utf8 или sjis, столбцы CHAR(N) занимают переменное количество места, но по-прежнему по крайней мере N байт.

  • Для больших таблиц или таблиц, содержащих много повторяющегося текста или числовых данных, рассмотрите использование формата строк COMPRESSED. Требуется меньше ввода-вывода на диск для загрузки данных в пул буфера или для выполнения полного сканирования таблицы. Прежде чем принимать окончательное решение, измерьте количество сжатия, которое можно получить, используя формат строк COMPRESSED по сравнению с форматом строк COMPACT.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/optimizing-innodb-storage-layout.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API