В моей базе данных mysql есть таблица с несколькими сотнями тысяч строк. Каждая строка имеет (среди других данных) имя пользователя и метку времени.медленный запрос mysql, который должен выполнять сотни тысяч раз в час
Мне нужно получить запись с самой последней меткой времени для данного пользователя.
В настоящее время, грубая сила запроса:
SELECT * FROM tableName WHERE `user_name`="The user name" AND datetime_sent = (SELECT MAX(`datetime_sent`) FROM tableName WHERE `user_name`="The user name");
Таблица имеет индекс по user_name
и на datetime_sent
.
Как я могу улучшить этот запрос? Я должен запускать тысячи этих запросов одновременно. Кажется, что каждый запрос занимает от 1 до 4 миллисекунд, и я подозреваю, что существует гораздо более эффективный способ достижения такого же результата.
Спасибо за предложение Юрген - я попробовал, и, к моему удивлению, выполнение примерно такого же количества запросов заняло больше времени (на 15% больше), чем оригинал. – RoyHB
Хм. Странно. Но я не могу найти решение быстрее. Вы пытались изменить свой 'datetime_sent'index с' asc' на 'desc'? –