• Как ускорить order by + group by из большой таблицы?

    @Schwelger
    Жаль, не указана версия MySQL. Но если речь идет о "восьмерке", то помогут оконные функции.
    SELECT t.*
    FROM (
      SELECT table.*, ROW_NUMBER() OVER w AS top_n
      FROM table 
      WINDOW w AS (PARTITION BY cat_id ORDER BY rating DESC)
    ) AS t
    WHERE t.top_n = 1

    Внутренний запрос добавит к table столбец top_n, где будет содержаться номер записи в категории по убыванию приоритета. Это для случая, когда меньшее значение rating соответствует более высокому приоритету. Если наоборот, то нужно заменить DESC на ASC. Внешний запрос ограничивает top_n единицей, то есть оставляет записи с максимальным рейтингом в каждой категории. Условие можно расширить, например, top_n <= 3 для вывода топ 3 в категориях.
    ЗЫ: Не нужно давать полю в таблице имя rating, это чревато неожиданными ошибками. Переименуйте.
    ЗЫЗЫ: Индекс по полю cat_id ускорит выполнение запроса.
    Ответ написан