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.