首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按和日期函数优化组

按和日期函数优化组
EN

Stack Overflow用户
提问于 2015-07-20 00:13:58
回答 2查看 23关注 0票数 0
代码语言:javascript
复制
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个结果

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-20 00:22:27

使用show create table popularityshow create table products来确定已经到位的索引。

索引会加快性能,但会减慢更新和插入速度。

您需要根据不同的数据处理方式找到正确的索引平衡,所以我并不是说仅仅用索引来修饰表。

票数 1
EN

Stack Overflow用户

发布于 2015-07-25 17:22:37

您对products pr几乎什么都不做,从查询中删除它。这会加速一些事情的发展。(如果你确实需要这张桌子,那就解释一下原因。)

然后,向popularity添加这个包含索引的复合索引将加快它的速度:

代码语言:javascript
复制
INDEX(date, id_product) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31507300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档