Spec-Zone.ru › MySQL 5.7

13.7.2.1 Заявление ANALYZE TABLE

ANALYZE [NO_WRITE_TO_BINLOG | LOCAL]
    TABLE tbl_name [, tbl_name] ...

ANALYZE TABLE выполняет анализ распределения ключей и сохраняет это распределение для указанной таблицы или таблиц. Для MyISAM таблиц это утверждение эквивалентно использованию myisamchk --analyze.

Это утверждение требует SELECT и INSERT привилегий для таблицы.

ANALYZE TABLE работает с InnoDB, NDB и MyISAM таблицами. Она не работает со представлениями.

ANALYZE TABLE поддерживается для разнесённых таблиц, и вы можете использовать ALTER TABLE ... ANALYZE PARTITION для анализа одной или нескольких партиций; для получения дополнительной информации см. Раздел 13.1.8, «Заявление ALTER TABLE» и Раздел 22.3.4, «Обслуживание партиций».

Во время анализа таблица блокируется с чтением для InnoDB и MyISAM.

ANALYZE TABLE удаляет таблицу из кэша определения таблиц, что требует блокировки сброса. Если существуют долго выполняющиеся запросы или транзакции, по-прежнему использующие таблицу, последующие запросы и транзакции должны ожидать завершения этих операций, прежде чем блокировка сброса будет освобождена. Поскольку ANALYZE TABLE обычно завершается быстро, может не быть очевидно, что задержки транзакций или запросов, связанных с той же таблицей, связаны с оставшейся блокировкой сброса.

По умолчанию сервер записывает ANALYZE TABLE утверждения в бинарный журнал, чтобы они реплицировались на репликах. Чтобы подавить протоколирование, укажите необязательное ключевое слово NO_WRITE_TO_BINLOG или его псевдоним LOCAL.

  • Вывод ANALYZE TABLE

  • Анализ распределения ключей

  • Другие соображения

Вывод ANALYZE TABLE

ANALYZE TABLE возвращает результат с столбцами, показанными в следующей таблице.

Столбец Значение
Table Имя таблицы
Op Всегда analyze
Msg_type status, error, info, note или warning
Msg_text Информационное сообщение
Анализ распределения ключей

Если таблица не изменилась с момента последнего анализа распределения ключей, таблица не анализируется повторно.

MySQL использует сохранённое распределение ключей, чтобы определить порядок объединения таблиц для объединений, отличных от константы. Кроме того, распределения ключей могут использоваться при определении индексов, которые следует использовать для конкретной таблицы в запросе.

Чтобы проверить мощность сохранённого распределения ключей, используйте SHOW INDEX или INFORMATION_SCHEMA STATISTICS таблицу. См. Раздел 13.7.5.22, «Заявление SHOW INDEX» и Раздел 24.3.24, «Таблица INFORMATION_SCHEMA STATISTICS».

Для InnoDB таблиц ANALYZE TABLE определяет мощность индекса, выполняя случайные погружения в каждом из деревьев индексов и соответствующим образом обновляя оценки мощности индексов. Поскольку это только оценки, повторные запуски ANALYZE TABLE могут давать разные числа. Это делает ANALYZE TABLE быстрым для InnoDB таблиц, но не 100% точным, потому что не учитывает все строки.

Вы можете сделать собранные ANALYZE TABLE более точными и стабильными, включив innodb_stats_persistent, как описано в Разделе 14.8.11.1, «Настройка параметров постоянной статистики оптимизатора». Когда innodb_stats_persistent включено, важно запускать ANALYZE TABLE после крупных изменений в данных столбцов индекса, так как статистика не пересчитывается периодически (например, после перезапуска сервера).

Если innodb_stats_persistent включено, вы можете изменить количество случайных погружений, изменив системную переменную innodb_stats_persistent_sample_pages. Если innodb_stats_persistent отключено, измените innodb_stats_transient_sample_pages вместо этого.

Для получения дополнительной информации об анализе распределения ключей в InnoDB см. Раздел 14.8.11.1, «Настройка параметров постоянной статистики оптимизатора» и Раздел 14.8.11.3, «Оценивание сложности ANALYZE TABLE для таблиц InnoDB».

MySQL использует оценки мощности индексов в оптимизации объединения. Если объединение не оптимизировано должным образом, попробуйте запустить ANALYZE TABLE. В тех немногих случаях, когда ANALYZE TABLE не даёт достаточно хороших значений для ваших конкретных таблиц, вы можете использовать FORCE INDEX со своими запросами, чтобы принудительно использовать конкретный индекс, или установить системную переменную max_seeks_for_key, чтобы гарантировать, что MySQL предпочитает поиск по индексу по сравнению с просмотром таблицы. См. Раздел B.3.5, «Проблемы, связанные с оптимизатором».

Другие соображения

ANALYZE TABLE очищает статистику таблицы из таблицы Information Schema INNODB_SYS_TABLESTATS и устанавливает столбец STATS_INITIALIZED в значение Uninitialized. Статистика собирается снова при следующем обращении к таблице.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/analyze-table.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API