При использовании MySQL вы можете заметить, что хотя таблица удаляет много данных, файлы данных и индексные файлы таблицы странно малы. Это связано с тем, что при удалении данных (особенно текста и BLOB) mysql оставляет множество пробелов в данных, которые занимают пространство исходных данных, поэтому размер файла не меняется. Эти отверстия могут быть повторно использованы в будущем при вставке данных, и, конечно, они могут оставаться там. Это отверстие не только увеличивает стоимость хранения, но и снижает эффективность сканирования таблицы за счёт фрагментации данных.
Сценарии использования:Если вы удалили большую часть таблицы или внесли много изменений в таблицу со строками переменной длины (с столбцами VARCHAR, BLOB или TEXT), используйте OPTIMIZE TABLE. Удалённые записи хранятся в связанном списке, а последующие операции INSERT повторно используют старое местоположение записи. Вы можете использовать OPTIMIZE TABLE для перепрофилирования неиспользуемого пространства и организации фрагментов файлов данных. [Когда большое количество данных удаляется из вашей библиотеки, вы можете заметить, что размер файла данных не уменьшается. Это связано с фрагментацией, оставшейся в файле данных после операции удаления.
В большинстве настроек запускать OPTIMIZE TABLE вообще не нужно. Даже если вы часто обновляете строки с переменной длиной, их не нужно часто запускать — раз в неделю или раз в месяц, только для конкретных таблиц.
OPTIMIZE TABLE работает только для таблиц MyISAM, BDB и InnoDB.
Для таблиц BDB таблица OPTIMIZE в настоящее время сопоставлена с таблицей ANALYZE. Для таблиц InnoDB таблица OPTIMIZE связана с таблицей ALTER, которая восстанавливает таблицу. Операции восстановления, обновление индексной статистики и освобождение неиспользуемого пространства в кластерных индексах.
Примечание: MySQL блокирует таблицу во время запуска OPTIMIZE TABLE.
Для Myisam можно напрямую использовать таблицу оптимизации table.name,Когда речь идёт о движке InnoDB, он сообщает: «Таблица не поддерживает оптимизацию, вместо этого делаю recreate + analyze», и в обычных условиях, если вы конвертируете из myisam в innodb, вы используете alter table table.name engine='innodb' для конвертации, и это также можно использовать для оптимизации.Поэтому, когда речь идёт о движке InnoDB, можно использовать alter table table.name engine='innodb' вместо оптимизации для оптимизации。
Чтобы просмотреть эффекты до и после просмотра, можно использовать команду статуса показать таблицу, например, статус таблицы из [базы данных], например, '[table_name]'; data_free в результате возврата — это пространство для хранения, занятое пустотой.
Скрипт оболочки, реализующий восстановление пакетной таблицы MySQL с таймером и таблицу оптимизации таблицы оптимизации, выглядит следующим образом:
Исходный текст:
Вход по гиперссылке виден.
Вход по гиперссылке виден.
|