Радость моя, да вроде все по индексам, должно быть быстро. Как вариант, сделать составной индекс на user_id, dttm. Во втором JOIN, думаю, rows сократиться
И можно исключить из запроса таблицу users, как предлагает Руслан ., если данные из нее не нужны
viktorross, нужно выполнить EXPLAIN от этого запроса через клиент и проанализировать результат. Будет ясно, из-за чего работает медленно. Дальше уже смотреть, что можно с этим сделать
Эффективность индекса зависит от кол-ва данных в таблице. Если данных совсем мало, то индекс по категории будет достаточным. Если данных больше, то индекс категория + рейтинг, будет эффективен. Если их очень много, то, возможно, не лишним будет сделать индекс по трем полям. Ну и когда данных неимоверно много, уже никакой индекс не спасет :)
Кирилл Горелов, паттерны решают какие-то проблемы, нужно определится с проблемой и подобрать паттерн, который её решает :) Если проблемы нет, то и паттерн не нужен
Данных мало. На скринах не видно EXPLAIN полностью, да и самого запроса нет. В другой последовательности выбирает данные? Если так, заставить запрос работать в с таблицами в той последовательности, в которой нужно