gpt4 book ai didi

mysql - 如何优化这个带有一些子查询的查询

转载 作者:行者123 更新时间:2023-11-29 08:34:56 24 4
gpt4 key购买 nike

我的查询是这样的:

SELECT date_format( created_at, '%Y-%m-%d' ) AS the_date, 
COUNT(s.id) AS total,
(SELECT COUNT(ks.id) FROM kc_shares ks WHERE site = 'facebook' AND date_format( created_at, '%Y-%m-%d' ) = the_date ) AS total_facebook,
(SELECT COUNT(ks.id) FROM kc_shares ks WHERE site = 'twitter' AND date_format( created_at, '%Y-%m-%d' ) = the_date ) AS total_twitter
FROM `kc_shares` s
GROUP BY `the_date`

我想要得到的是每日分享数量以及总分享数、facebook 总分享数(因此 site = 'facebook')和 twitter 总分享数。这就是为什么我需要GROUP BY

当它有几千行时,就没有问题了。但该表目前有近20万行,查询速度非常慢,大约需要20-30秒,我猜甚至更多。

我尝试向 site 和created_at 字段添加索引,但没有成功。

谢谢

最佳答案

我认为子查询正在消耗性能。所以也许你可以做这样的事情:

SELECT 
date_format( created_at, '%Y-%m-%d' ) AS the_date,
COUNT(s.id) AS total,
SUM(CASE WHEN s.site='facebook' THEN 1 ELSE 0 END) AS total_facebook,
SUM(CASE WHEN s.site='twitter' THEN 1 ELSE 0 END) AS total_twitter
FROM
`kc_shares` s
GROUP BY
`the_date

`

关于mysql - 如何优化这个带有一些子查询的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15474101/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com