Spec-Zone .ru
спецификации, руководства, описания, API

5.3.4. Дефрагментация Таблицы

Случайные вставки в или удаления от вторичного устройства индексируют, может заставить индексирование становиться фрагментированным. Фрагментация означает, что физическое упорядочивание индексных страниц на диске не близко к индексировать упорядочиванию записей на страницах, или что есть много неиспользованных страниц в блоках на 64 страницы, которые были выделены индексированию.

Один признак фрагментации - то, что таблица занимает больше места, чем это "должно" взять. То, сколько это точно, трудно определить. Все InnoDB данные и индексируют, сохранены в B-деревьях, и их коэффициент заполнения может измениться от 50 % до 100 %. Другой признак фрагментации - то, что сканирование таблицы, такое как это занимает больше времени, чем это "должно" взять:

SELECT COUNT(*) FROM t WHERE non_indexed_column <> 12345;

Предыдущий запрос требует, чтобы MySQL выполнил полное сканирование таблицы, самый медленный тип запроса для большой таблицы.

Чтобы убыстриться индексируют сканирования, можно периодически выполнять "нуль" ALTER TABLE работа, которая заставляет MySQL восстанавливать таблицу:

ALTER TABLE tbl_name ENGINE=INNODB

Другой способ выполнить работу дефрагментации состоит в том, чтобы использовать mysqldump, чтобы вывести таблицу к текстовому файлу, отбросить таблицу, и перезагрузить это от файла дампа.

Если вставки в индексирование всегда возрастают, и записи удаляются только из конца, InnoDB алгоритм управления файловым пространством гарантирует, что фрагментация в индексировании не происходит.