执行一条 Mysql 语句用了 40 分钟,好慢啊

2018 年 2 月 24 日
 frozenway

mysql> SELECT count(*) AS tt,agent,ip,isp FROM sh_agent_log GROUP BY ip ORDER BY tt DESC LIMIT 20;

...

20 rows in set (40 min 27.17 sec)

想统计一下访问日记里面访问次数最多的 IP,没想到要查询这么久,一共有 30 万条数据而已,请问怎么优化查询

11480 次点击
所在节点    MySQL
56 条回复
abusizhishen
2018 年 2 月 24 日
事实上年的
abusizhishen
2018 年 2 月 24 日
😂😂😂打错了,试试上面的
lygmqkl
2018 年 2 月 24 日
mysql 金句 用小结果驱动大结果。 当然索引之类的 都要做到位,其实在业务逻辑层面上可以 规避这些风险的。
liuxu
2018 年 2 月 24 日
看上去直接原因还是临时磁盘表用的太多,io 跟不上,换 SSD 会好些。但正确的姿势还是应该加索引了。。
alcarl
2018 年 2 月 24 日
@cisisustring 不会,mysql 5.7 以下默认没有开这个检查
alcarl
2018 年 2 月 24 日
默认配置的话,可能是 sort 的 buff 有点小,innodb 的 buf 也有点小,都有影响,调大一点会好一些
laqow
2018 年 2 月 24 日
tt 和 ip 的类型改一下,改成定长字符串或整型,或算一列 hash 再建索引,应该不会慢
ty89
2018 年 2 月 24 日
建议楼主顺便把 create table sh_agent_log 的结果贴一下
justfindu
2018 年 2 月 24 日
不加索引也不应该这么慢啊 才 30W
picasso250
2018 年 2 月 24 日
如果 sh_agent_log 这个的数据还会不断增长,那么建议你用 redis 存 ip 记录吧.
这个需要单独处理.

如果 sh_agent_log 不再增长,你就是单独拿出来分析一下. 换个 SSD 吧.
woscaizi
2018 年 2 月 24 日
看看类似 select * from table limit 0,20 的时间如何,然后再慢慢加 group by,看看哪个条件会导致慢。
另外,磁盘 io 怎么样,是 ssd 还是 hdd ?
rrfeng
2018 年 2 月 24 日
30w …… 给我个文本文件我用 awk 1s 内给你跑出来
yaoweilei
2018 年 2 月 24 日
30 万条,应该 40ms 内查出来哈,40 分钟实在是敬佩楼主的耐心。
chcx
2018 年 2 月 24 日
佩服耐心。 index.
frozenway
2018 年 2 月 24 日
@abusizhishen 你这个语句执行报错了
hanqi7012
2018 年 2 月 24 日
40 分钟三十万有点慢啊
那天下的库 4 亿也没这么慢啊
frozenway
2018 年 2 月 24 日
加了索引,然而还是很慢
wooyu
2018 年 2 月 24 日
@hanqi7012 我已经报警了
SoulSleep
2018 年 2 月 24 日
贴 explain 你发 sql 我只能吐槽 排序 group limit......能不慢吗…… 40min ?那就太多了
shyy06
2018 年 2 月 24 日
Mysql 从删库到跑路

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/432153

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX