Використовуючи mysql, ви можете помітити, що хоча таблиця видаляє багато даних, файли даних і індексні файли таблиці дивно малі. Це пов'язано з тим, що mysql залишає багато прогалин у даних при видаленні даних (особливо Text і BLOB), які займають простір оригінальних даних, тому розмір файлу не змінюється. Ці отвори можуть бути використані повторно в майбутньому при вставці даних, і, звісно, вони можуть залишатися там. Цей отвір не лише збільшує вартість зберігання, а й знижує ефективність сканування таблиці через фрагментацію даних.
Сценарії використання:Якщо ви видалили велику частину таблиці або внесли багато змін у таблицю з рядками змінної довжини (з стовпцями VARCHAR, BLOB або TEXT), слід використовувати OPTIMIZE TABLE. Видалені записи зберігаються у зв'язаному списку, а подальші операції INSERT повторно використовують старе місце запису. Ви можете використовувати OPTIMIZE TABLE для перепрофілювання невикористаного простору та організації фрагментів файлів даних. [Коли велика кількість даних видаляється з вашої бібліотеки, ви можете помітити, що розмір файлу даних не зменшився. Це пов'язано з фрагментацією, що залишилася у файлі даних після операції видалення.
У більшості налаштувань взагалі не потрібно запускати OPTIMIZE TABLE. Навіть якщо ви часто оновлюєте рядки змінної довжини, не потрібно часто запускати їх — раз на тиждень чи раз на місяць, лише для конкретних таблиць.
OPTIMIZE TABLE працює лише для таблиць MyISAM, BDB та InnoDB.
Для таблиць BDB таблиця OPTIMIZE наразі відображається у ANALYZE TABLE. Для таблиць 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 у поверненому результаті — це простір для зберігання, зайнятий порожнечею.
Shell-скрипт, який реалізує ремонт пакетної таблиці MySQL з таймером та таблицю оптимізації таблиці для оптимізації, має наступний вигляд:
Оригінальний:
Вхід за гіперпосиланням видно.
Вхід за гіперпосиланням видно.
|