Правильно. OPTIMIZE TABLE копирует данные в новое табличное пространство и перестраивает индексы. Для большой таблицы это занимает много времени.
Дефрагментация таблицы InnoDB не сильно повышает производительность, так как внутренне страницы обычно хранятся не по порядку независимо. То есть, чтобы InnoDB возвращал «следующую строку», ему, возможно, придется следовать указателю с текущей страницы на другую страницу, которая может быть физически далеко от текущей страницы. Поскольку это нормальное поведение InnoDB в не фрагментированном табличном пространстве, это может не иметь никакого значения, если страницы между ними заняты или не заполнены.
Это может помочь дефрагментировать табличное пространство, если это приведет к более эффективной работе. упакованные страницы, поэтому страницы, кэшированные в пуле буферов, представляют больший поднабор строк и индексов для таблицы.
Анализ таблицы не занимает много времени и не занимает дольше для большого стола. Он считывает фиксированное количество страниц в качестве образца таблицы и на основании этого оценивает количество элементов индекса и средний размер строки, а также некоторые другие статистические данные. По умолчанию это образцы 8 или 20 страниц, в зависимости от того, включены ли постоянные статистические данные.
Способ, которым таблица анализа помогает повысить производительность, заключается в том, что она обновляет статистику, которую оптимизатор использует для выбора индексов для данного запроса. Если обновленная статистика не окажет существенного влияния на выбор индекса, это не повлияет на производительность. Это имеет значение только в том случае, если новая статистика приведет к тому, что оптимизатор выберет более благоприятный индекс.