У меня есть большая таблица (~ 1M строк сейчас, скоро ~ 10M), которая имеет два ранжированных столбца (в дополнение к обычным данным):
avg_visited
, число с плавающей точкой 0-1, представляющее% возрастной популярности; выше, тем лучше
alexa_rank
, целое число 1-N, дающее априорный рейтинг
Априорный рейтинг взят из внешних источников, поэтому не может быть изменен. Многие строки еще не пользуются популярностью (так как ни один пользователь еще не нажал на них), поэтому априорное ранжирование - это резервный порядок. Однако популярность меняется очень часто - как для обновления старых записей, так и для добавления популярности к тем, у которых ранее был только априорный рейтинг, если какой-то пользователь действительно ударил его.
Я часто запускаю SELECT id, url, alexa_rank, avg_visited FROM
сайтов ORDER BY avg_visited desc, alexa_rank asc LIMIT 49500, 500
(для различных значений 49500).
Однако ORDER BY не может использовать индекс со смешанным возрастанием для http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html
Это в MySQL 5.1, innodb.
Как мне лучше всего изменить эту ситуацию, чтобы получить нормальный, полностью проиндексированный запрос?