У меня есть опыт работы с сервером MS SQL, где возможно и полезно статистика обновления и перестроить индексы. Я не могу найти такой вариант в MySQL innoDB, есть ли такая опция? Если нет, то как MySQL-база данных создает план выполнения? Обновляет ли индекс MySQL и статистику с каждым UPDATE и INSERT?
Как я могу перестроить индексы и обновить статистику в MySQL innoDB?
Ответ 1
Это делается с помощью
ANALYZE TABLE table_name;
Подробнее об этом .
ANALYZE TABLE анализирует и сохраняет распределение ключей для таблицы. Во время анализа таблица блокируется с блокировкой чтения для MyISAM, BDB и InnoDB. Это выражение работает с таблицами MyISAM, BDB, InnoDB и NDB.
Ответ 2
Почему? Почти никогда не нужно обновлять статистику. Еще более необходимо восстановить индекс.
OPTIMIZE TABLE tbl;
будет восстанавливать индексы и делать ANALYZE
; требуется время.
ANALYZE TABLE tbl;
быстро для InnoDB перестроить статистику. С 5.6.6 он еще менее необходим.
Ответ 3
Вы также можете использовать предоставленный инструмент CLI mysqlcheck
для запуска оптимизации. Он получил тонну переключателей, но по своему самому основному вы просто переходите в базу данных, имя пользователя и пароль.
Добавление этого в cron или Windows Scheduler может сделать это автоматическим процессом. (MariaDB, но в основном то же самое.)