У меня есть база данных "алгебра" с таблицей "вопросы" с 1 033 990 строками. Записи имеют атрибут "решено", который равен INT. У меня есть простой запрос
select count(*) from questions where solved = 0
У меня два сервера с похожими процессорами. На обоих серверах таблицы одинаковые. (база данных — копия рабочей). Они на SSD. На одном сервере Ubuntu 14.04 с MySQL 5.5.49, а на другом — Ubuntu 16.04 с MySQL 5.7.12.
Проблема в том, что этот запрос занимает всего 0,009 с на MySQL 5.5, но занимает 0,304 с на MySQL 5.7. Что в 34 раза МЕДЛЕННЕЕ!!!
Планы запросов примерно похожи:
Медленный сервер:
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE questions NULL index NULL by_topic_solved 97 NULL 1033990 10.00 Using where; Using index
Быстрый сервер:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE questions index NULL by_topic_solved 97 NULL 1033989 Using where; Using index
Почему это может быть так, меня сбивает с толку. Я видел и другие, более сложные проблемы с производительностью с этой новой настройкой 5.7, но это самая простая проблема, с которой нужно бороться с точки зрения базового запроса.
Я пытаюсь найти объяснение этому или с чего начать. my.cnf был примерно похож между ними. Любые предложения будут приняты с благодарностью.
решение1
Я полностью понял эту проблему. Изменилось то, что в новом mysql кэш запросов отключен из-за настройки по умолчанию query_cache_type = OFF. Когда я снова включил кэш запросов, установив query_cache_type=1, производительность сразу же улучшилась. Поскольку мой сайт использует в 100 раз больше запросов SELECT, чем запросов INSERT/UPDATE, использование кэша запросов имеет для меня смысл. Спасибо, что указали мне на это направление!