2012-01-06 2 views
2

В моей базе данных 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 миллисекунд, и я подозреваю, что существует гораздо более эффективный способ достижения такого же результата.

ответ

2
select * from tableName 
where userName = 'username' 
order by datetime_sent desc 
limit 1 
+0

Спасибо за предложение Юрген - я попробовал, и, к моему удивлению, выполнение примерно такого же количества запросов заняло больше времени (на 15% больше), чем оригинал. – RoyHB

+0

Хм. Странно. Но я не могу найти решение быстрее. Вы пытались изменить свой 'datetime_sent'index с' asc' на 'desc'? –