У меня есть главная страница списка на моем веб-сайте, которая выбирает 25 строк с самыми высокими значениями в определенном столбце. У меня нет проблем с получением верхнего списка, если он основан на одном столбце (например, оценка), но когда задействовано больше столбцов, я столкнулся с некоторыми проблемами производительности.
В проблемном случае я хочу выбрать 25 строк, упорядоченных по сумме двух столбцов в порядке убывания.
SELECT username, rank1 + rank2 AS rank FROM users ORDER BY rank DESC LIMIT 25
Запрос работает, но занимает примерно 0,25 секунды, в отличие от запросов к одному столбцу, которые занимают около 0,0003 секунды. Ниже приведен результат для запроса объяснения:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra 1 | SIMPLE | accounts | ALL | NULL | NULL | NULL | NULL | 517874 | Using filesort
И rank1, и rank2 индексируются, но очевидно, что индексы не используются для этого запроса. Есть ли способ улучшить производительность, как-то отредактировав запрос или индексы?
rank1
иrank2
? - person Gordon Linoff   schedule 23.02.2014(username, rank1, rank2)
? - person Bob Jarvis - Reinstate Monica   schedule 23.02.2014