使用收藏夹和视图系统订购

时间:2015-02-03 21:41:46

标签: php mysql

我有一个涉及四个表的问题 - 食谱表,收藏食谱表,视图表和食谱类别表。表结构如下:

收藏夹

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子句和子查询?

0 个答案:

没有答案