Почему запрос на MySQL 8 выполняется намного медленнее, чем на предыдущей версии?

Почему производительность MySQL 8 сильно отличается от MySQL 5.7 при выполнении запроса на поиск по текстовой строке в таблице на 260 тыс. строк без индексов?
Изображение к вопросу
Изображение к вопросу
  • 11 января 2024 г. 15:08
Ответы на вопрос 1
Существует ряд причин, по которым MySQL 8 может работать медленнее, чем MySQL 5.7, особенно в определенных сценариях использования, таких как поиск по текстовой строке в большой таблице без индексов. Вот несколько возможных причин:

1. **Новые настройки по умолчанию**: Например, MySQL 8 использует движок хранения InnoDB по умолчанию, который имеет другую систему управления транзакциями, блокировок и буферов по сравнению с MyISAM в более старых версиях. Также по умолчанию включена генерация гистограмм для оптимизатора, что может замедлить работу на больших объемах данных без индексов.

2. **Строгие настройки SQL режимов**: MySQL 8 вводит более строгие режимы SQL, что может влиять на обработку запросов и, как следствие, на производительность. Это может потребовать изменения структуры запросов или таблиц для повышения производительности.

3. **Включенные функции аудита и логирования**: По умолчанию могут быть включены некоторые функции аудита и логирования, которые оказывают негативное влияние на производительность.

4. **Различные оптимизации запросов**: Между версиями 5.7 и 8 были внесены изменения в оптимизатор, что может привести к разным планам выполнения для одних и тех же запросов. В некоторых случаях новые планы могут быть менее оптимальными при определенных условиях.

5. **Изменения в системной архитектуре и конфигурации**: MySQL 8 вносит изменения в системные таблицы и информационную схему, что тоже может влиять на производительность.

6. **Unicode и новые возможности сортировки**: MySQL 8 по умолчанию использует utf8mb4 в качестве набора символов и улучшенную поддержку Unicode, в то время как MySQL 5.7 мог использовать другой набор символов по умолчанию. Это может повлиять на производительность операций с текстовыми данными.

Чтобы улучшить производительность MySQL 8 в вашем конкретном случае, вы можете попробовать следующее:

- **Добавление индексов**: Добавление полнотекстовых индексов для операций поиска по тексту может значительно ускорить выполнение запросов.

- **Проверка и настройка конфигурации**: Убедитесь, что параметры конфигурации сервера оптимизированы под вашу рабочую нагрузку. Это может включать параметры буфера InnoDB, настройки кеша и т.д.

- **Анализ планов запроса**: Используйте команду `EXPLAIN` для изучения плана выполнения запроса и внесите потенциальные оптимизации в структуру запросов или таблиц.

- **Обновление статистики таблиц**: Убедитесь, что статистика таблиц актуальна, чтобы оптимизатор мог делать лучшие предположения о данных.

- **Тюнинг производительности системы**: Системная оптимизация, включая настройку операционной системы и файловой системы, могут также повлиять на производитель
Похожие вопросы