У меня есть групповой запрос, который очень быстр, когда дело доходит до индексации, объединения, отправки результатов и т. Д. К сожалению, mysql тратит 99,6% своего времени на «копирование в таблицу tmp», когда я его профилирую. Я не знаю, как заставить MySQL работать лучше самостоятельно.
Эта группа по запросу, по сути, находит количество объектов для 20 самых популярных тегов в системе. Я строю этот запрос, чтобы отфильтровать теги, которые выбирает пользователь, существенно сужая поле. При выборе нового тега производительность запросов значительно улучшается. Если они выбирают 2 или 3 тега, запрос очень быстро находит число объектов с этими 2 или 3 тегами, а также следующие наиболее популярные теги после этого.
По сути, проблема производительности заключается в том, что ни один тег не выбран или когда выбран один тег. Как лучше всего решить эту проблему?
1) Кеш памяти, как ehcache? Ввязаться в спящий режим?
2) Mysql кеш запросов?
3) Сохранить результаты выбора тегов 0 и 1 для каждого тега в системе в таблице кеша и использовать их в течение 24 часов? Использовать работу, чтобы заполнять результаты каждый день?
Есть еще идеи? Я использую Spring, Java, Hibernate, Mysql.