SELECT p.id_product
FROM popularity p, products pr
WHERE p.id_product = pr.id_product
AND p.date >= (DATE_SUB(CURDATE(), INTERVAL 30 DAY))
GROUP BY p.id_product order by count(p.id_product) desc LIMIT 0, 6
我想知道如何尽可能优化我的查询。我试图削减脂肪,特别是这个问题给了我麻烦,因为它在任何地方都被使用。我有一个表格,其中存储了所访问的产品页面的每个实例,以及另一个包含产品的表格。
p.id_product是非唯一键,而pr.id_product是产品'表主键。我不认为我正在进行正确的查询,因为我似乎正在进行完整的索引扫描以在两个表之间进行连接。而且我不确定以这种方式调用DATE_SUB是最好的主意(我看过去一个月),或者我的小组/订单是否正确。我的数据库表也运行InnoDB。
有什么方法可以让它更快吗?我已经设置了查询限制,因为我注意到软件从未使用超过6个结果
答案 0 :(得分:1)
使用show create table popularity
和show create table products
确定已有的索引。
索引可提高性能,但会降低更新和插入速度。
你需要根据追踪数据的不同方式找到正确的索引平衡,所以我不能说只是用表格来加工表。
答案 1 :(得分:0)
您对products pr
几乎没有任何作用,请将其从查询中删除。这会加速一些事情。 (如果你做需要表格,那么解释原因。)
然后,将此复合(覆盖)索引添加到popularity
将加快速度:
INDEX(date, id_product)