mysql优化分组查询_MySQL分组查询优化

我有三个表:类别,文章和article_events,具有以下结构

categories: id, name (100,000 rows)

articles: id, category_id (6000 rows)

article_events: id, article_id, status_id (20,000 rows)每篇文章行的最高篇article_events.id描述了每篇文章的当前状态。

我将返回一个类别表,以及最近一次事件status_id为'1'的文章数量。

我迄今为止的工作,但是相当慢(10秒)与我的表的大小。想知道是否有办法让这个更快。据我所知,所有表格都有适当的索引。

SELECT c.id,

c.name,

SUM(CASE WHEN e.status_id = 1 THEN 1 ELSE 0 END) article_count

FROM categories c

LEFT JOIN articles a ON a.category_id = c.id

LEFT JOIN (

SELECT article_id, MAX(id) event_id

FROM article_events

GROUP BY article_id

) most_recent ON most_recent.article_id = a.id

LEFT JOIN article_events e ON most_recent.event_id = e.id

GROUP BY c.id基本上我必须连接两次事件表,因为询问status_id以及MAX(id)只返回找到的第一个status_id,而不是与MAX(id)行关联的那个。

任何方式使这更好?或者我只需要10秒钟?谢谢!

编辑:

以下是我对查询的解释:

ID | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra

---------------------------------------------------------------------------------------------------------------------------

1 | PRIMARY | c | index | NULL | PRIMARY | 4 | NULL | 124044 | Using index; Using temporary; Using filesort

1 | PRIMARY | a | ref | category_id | category_id | 4 | c.id | 3 |

1 | PRIMARY | | ALL | NULL | NULL | NULL | NULL | 6351 |

1 | PRIMARY | e | eq_ref | PRIMARY | PRIMARY | 4 | most_recent.event_id | 1 |

2 | DERIVED | article_events | ALL | NULL | NULL | NULL | NULL | 19743 | Using temporary; Using filesort

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值