我有一个涉及四个表的问题 - 食谱表,收藏食谱表,视图表和食谱类别表。表结构如下:
id | user_id | recipe_id | timestamp
id | user_id | recipe_id | timestamp
id | recipe_id | category_id
我有超过2500个食谱; 3500个食谱类别关系(一些食谱适合多个类别);超过13000个最喜欢的作品;超过80000个查看条目。这是我正在尝试的SQL查询:
select
recipes.title,
recipes.summary,
recipes.is_free,
recipes.is_starter,
recipes_id
(select count(*)
from recipes_favorites
where recipes_favorites.recipe_id = recipes.id) as favorites,
(select count(*)
from recipe_views
where recipe_views.recipe_id = recipes.id) as views
from recipes
join recipes on recipe_categories.recipe_id = recipes.id
where recipe_categories.category_id = 25
group by recipes.id
order by views desc
limit 35
此查询平均需要72秒才能返回。删除连接将其删除为3秒,仅删除两个子查询将其全部删除至不到一秒。子查询 - 或以任何方式获取mysql中的收藏夹和视图 - 很重要,因为我希望能够使用这些值来订购Recipes。
有什么方法可以优化表或查询,以便我可以同时保留where
子句和子查询?