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

我有一个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作为一个索引
[quote]另外我想加limit的,因为我只需要查询到的前15个,但是我同时还想知道符合条件的所有products的数量,请问这个怎么获取?[/quote]

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