问题描述
我有一个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的数量,请问这个怎么获取?
解决方案
products表的id和categories表的categories_id分别作为各自的主键;products表中的: product_state + featured作为一个索引 引用另外我想加limit的,因为我只需要查询到的前15个,但是我同时还想知道符合条件的所有products的数量,请问这个怎么获取?查询两次,一次limit,一次用count函数,好像没有直接的方法可以一下子获取