kilik52 2012-06-30 09:44
浏览 290
已采纳

请问牛人以下我的数据库结构该怎么设计索引和查询方式?

我有一个products表,还有一个categories表,一个product可能会属于多个category,所以这两个表之间是用joint table连起来的。
现在我有一个请求

SELECT products.* FROM products INNER JOIN categories_products ON categories_products.product_id = products.id INNER JOIN categories ON categories.id = categories_products.categories_id WHERE (product_state = 'onsale' AND featured = '1' AND categories_products.categories_id = '14') ORDER BY products.created_at DESC

这里用到的查询条件有:
products表中的:
product_state
featured

categories表中的有:
categories_id

还要按照
products.created_at降序

请问这样的请求,我想要请求时间最少,应该怎么设计索引?我的SQL语句有哪些地方可以修改?谢谢!

另外我想加limit的,因为我只需要查询到的前15个,但是我同时还想知道符合条件的所有products的数量,请问这个怎么获取?

  • 写回答

1条回答

  • _1_1_7_ 2012-06-30 14:56
    关注

    products表的id和categories表的categories_id分别作为各自的主键;

    products表中的:
    product_state + featured作为一个索引
    [quote]另外我想加limit的,因为我只需要查询到的前15个,但是我同时还想知道符合条件的所有products的数量,请问这个怎么获取?[/quote]

    查询两次,一次limit,一次用count函数,好像没有直接的方法可以一下子获取

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器