Mysql занимает 0,7 секунды, чтобы «скопировать в таблицу tmp». Каков наилучший способ кэширования такого рода запросов? - PullRequest
1 голос
/ 08 июля 2010

У меня есть групповой запрос, который очень быстр, когда дело доходит до индексации, объединения, отправки результатов и т. Д. К сожалению, mysql тратит 99,6% своего времени на «копирование в таблицу tmp», когда я его профилирую. Я не знаю, как заставить MySQL работать лучше самостоятельно.

Эта группа по запросу, по сути, находит количество объектов для 20 самых популярных тегов в системе. Я строю этот запрос, чтобы отфильтровать теги, которые выбирает пользователь, существенно сужая поле. При выборе нового тега производительность запросов значительно улучшается. Если они выбирают 2 или 3 тега, запрос очень быстро находит число объектов с этими 2 или 3 тегами, а также следующие наиболее популярные теги после этого.

По сути, проблема производительности заключается в том, что ни один тег не выбран или когда выбран один тег. Как лучше всего решить эту проблему?

1) Кеш памяти, как ehcache? Ввязаться в спящий режим? 2) Mysql кеш запросов? 3) Сохранить результаты выбора тегов 0 и 1 для каждого тега в системе в таблице кеша и использовать их в течение 24 часов? Использовать работу, чтобы заполнять результаты каждый день?

Есть еще идеи? Я использую Spring, Java, Hibernate, Mysql.

Ответы [ 4 ]

2 голосов
/ 08 июля 2010

Нам определенно нужен запрос и EXPLAIN запрос для ответа на него.Возможно также со схемой.

0 голосов
/ 09 июля 2010

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

Если у вас есть ресурсы, вы можете рассмотреть возможность увеличения этого параметра. Или вы можете найти способ уменьшить размер результатов, возвращаемых для ноля или 1 тега.

0 голосов
/ 08 июля 2010

Возможно ли вам просто создать представление, а не копировать файлы?

0 голосов
/ 08 июля 2010

Какие типы столбцов используются?Если вы посмотрите на ссылку MySql , вы увидите некоторые факторы, которые могут инициировать хранение на диске для вашего запроса во время обработки.Ваша дисковая система достаточно медленная, чтобы вызвать такую ​​проблему?

...