MySQL - Запрос самого последнего ввода на основе имени пользователя - ОЧЕНЬ МЕДЛЕННО - PullRequest
3 голосов
/ 15 мая 2011

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

Пример запроса, который я использую: SELECT timestamp FROM entry_list WHERE username = 'user' ORDER BY entry_id DESC LIMIT 1

В таблице есть двухколонный индекс: имя пользователя, отметка времени. Этот индекс используется согласно запросу EXPLAIN со следующей дополнительной информацией:

select_type: SIMPLE
тип: ref
key_len: 34
ref: const
ряды: 5654
Дополнительно: Использование где; Использование индекса; Использование сортировки файлов

Как я могу оптимизировать свой запрос? Это достаточно быстро для одного пользователя (0,2 ~ 0,4 с), но некоторые учетные записи загружают эту информацию сразу для 5, 10 или даже 20 разных пользователей. Даже 0,2 ~ 0,4 кажется немного длинным, и когда это приводит к замедлению загрузки страницы на 4-8 секунд, это недопустимо.

Ответы [ 2 ]

2 голосов
/ 15 мая 2011

Попробуйте SELECT MAX(timestamp) FROM entry_list WHERE username = 'user'

также, возможно, не самая лучшая идея использовать зарезервированные ключевые слова в качестве имен столбцов, попробуйте изменить timestamp на insert_date или что-то подобное

0 голосов
/ 15 мая 2011

Вы можете добавить поле в пользовательскую таблицу last_query_id. Затем просто обновите это поле, когда вы делаете новый запрос. last_query_id должен указывать на индекс в таблице, которую вы ищете в данный момент (из того, что я могу сказать.) Этот подход избегает поиска по тоннам записей, чтобы найти самую последнюю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...