Майте на увазі, що ОПТИМІЗАЦІЯ ТАБЛИЦЯ не виконує дефрагментацію. Внутрішньо OPTIMIZE TABLE виконує кілька операцій (копіювання даних у тимчасовий файл, відтворення індексів, перерахування статистики індексу). Насправді, приклад, який я маю, можна виконати вручну, як показано.
Приклад: Якщо ви оптимізуєте mydb.mytable
, вводите цю команду:
OPTIMIZE TABLE mydb.mytable;
Зауважте, що mysql виконує щось наступне під кришкою:
CREATE TABLE mydb.mytable2 LIKE mydb.mytable;
ALTER TABLE mydb.mytable2 DISABLE KEYS;
INSERT INTO mydb.mytable2 SELECT * FROM mydb.mytable;
ALTER TABLE mydb.mytable2 ENABLE KEYS;
DROP TABLE mydb.mytable;
ALTER TABLE mydb.mytable2 RENAME mydb.mytable;
ANALYZE TABLE mydb.mytable;
Це досить корисно для таблиць із великим обсягом ОНОВЛЕННЯ та ВИДАЛЕННЯ
Виконуючи це, можна досягти двох речей
Не дозволяйте mysql переглядати фрагменти таблиці, намагаючись завантажити дані у потрібні розміри. Усунення цих фрагментів зменшить цю операцію.
Перерахування статистики індексу допомагає оптимізатору запитів MySQL побудувати кращі плани EXPLAIN. В іншому випадку запити можуть погіршитися у часі виконання, оскільки оптимізатор запитів MySQL вирішив погано здогадуватися в плані EXPLAIN. Це було б певним симптомом таблиці, яка мала велику кількість ОНОВЛЕННЯ та УДАЛЕННЯ.
КАВАТИ
Що стосується кешування, кешування швидко занурюється через сканування повного столу. Для індексованих сторінок MyISAM виходять і виходять із кешу клавіш MyISAM. Для InnoDB дані та покажчикові сторінки витікають із та в пул InnoDB Buffer.