Я пытаюсь оптимизировать этот запрос, и, как бы просто он ни звучал, мне трудно понять, как его ускорить.
У меня есть два объекта, виджет и категория(Отношение HABTM), с таблицами "виджеты", "категории" и "категории_виджеты" (объединяющая таблица).Я пытаюсь найти все виджеты в определенной категории.Просто верно?Однако в некоторых категориях могут быть виджеты по 10-50 тыс., И на выполнение моих запросов уходит 1-2 секунды (у моего сайта довольно высокий трафик, поэтому это совершенно неприемлемо).
Вот что я сейчас делаю:
SELECT * FROM `categories`
LEFT JOIN `categories_widgets` ON `categories_widgets`.`category_id`=`categories`.`id`
JOIN `widgets` ON `widgets`.`id`=`categories_widgets`.`widget_id`
ORDER BY `widgets`.`id` DESC
LIMIT 0,10
Мне нужно упорядочить виджеты по убыванию идентификатора (это то, что убивает скорость), и я иногда могу иметь прилично высокие смещения (не уверен, что с этим можно что-то сделать).
Буду признателен за любую помощь в этом, или, в качестве альтернативы, если у вас есть какие-либо рекомендации по реструктуризации таблицы, это тоже возможно (но при условии, что много категорий и много виджетов без простого способа шардинга).
Спасибо!