MySQL - как сделать оптимизацию таблиц базы (OPTIMIZE TABLE) и в каких случаях это нужно применять?

Материал из Wiki - Iphoster - the best ever hosting and support. 2005 - 2024
Перейти к:навигация, поиск

MySQL - как сделать оптимизацию таблиц базы (OPTIMIZE TABLE) и в каких случаях это нужно применять?

Пример использования команды

Синтаксис команды для оптимизации таблиц одной базы:

# mysqlcheck -u root -p --optimize database_name

Синтаксис команды для оптимизации таблиц всех баз на сервере:

 # mysqlcheck -A -u root -p --optimize
 --all-databases, -A
 Check all tables in all databases. This is the same as using the --databases option and naming all the databases on the command line.


Также можно заменить mysqlcheck --optimize на одну команду mysqloptimize. Ниже в таблице показаны варианты для repair, analyze и optimize :

      ┌──────────────┬──────────────────────────────────┐
      │mysqlrepair   │ The default option is --repair   │
      ├──────────────┼──────────────────────────────────┤
      │mysqlanalyze  │ The default option is --analyze  │
      ├──────────────┼──────────────────────────────────┤
      │mysqloptimize │ The default option is --optimize │
      └──────────────┴──────────────────────────────────┘

Расширенный синтаксис параметра OPTIMIZE TABLE

4.5.1. Синтаксис команды OPTIMIZE TABLE
OPTIMIZE TABLE tbl_name[,tbl_name]… 
Команда OPTIMIZE TABLE должна использоваться после удаления большей части таблицы или если в таблице было внесено много изменений в строки переменной длины (таблицы, в которых есть столбцы VARCHAR, BLOB или TEXT). Удаленные записи поддерживаются при помощи связного списка, и последующие операции INSERT повторно используют позиции старых записей. Чтобы перераспределить неиспользуемое пространство и дефрагментировать файл данных, можно воспользоваться командой OPTIMIZE TABLE. На данный момент команда OPTIMIZE TABLE работает только с таблицами MyISAM и BDB. Для таблиц BDB команда OPTIMIZE TABLE выполняет ANALYZE TABLE. Можно применить OPTIMIZE TABLE к таблицам других типов, запустив mysqld с параметром —skip-new или —safe-mode, но в этом случае OPTIMIZE TABLE лишь только выполняет ALTER TABLE. Команда OPTIMIZE TABLE работает следующим образом: * Если в таблице есть удаленные или разделенные строки, восстанавливает таблицу. * Если индексные страницы не отсортированы — сортирует их. * Если статистические данные не обновлены (и восстановление нельзя осуществить путем сортировки индексов), обновляет их.
Команда OPTIMIZE TABLE для MyISAM представляет собой эквивалент выполнения myisamchk —quick —check-only-changed —sort-index —analyze над таблицей. Обратите внимание: во время работы OPTIMIZE TABLE таблица заблокирована!

Вывод - в каких случаях нужно применять OPTIMIZE TABLE

1) Так как при выволнении данной команды таблица которая оптимизируется - блокируется, то выполнять данную команду нужно только в спады посещаемости, например, ночью.
2) Данная команда выполняется только на сайтах, где в базе происходит очень много удалений и изменений записей, например, меняется несколько тысяч статей или комментариев.