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

2018-02-24 11:22:57 +08:00
 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 万条数据而已,请问怎么优化查询

10775 次点击
所在节点    MySQL
56 条回复
GeekCat
2018-02-24 17:21:46 +08:00
30 万数据 40min....敢问硬盘 rpm 几百?
abusizhishen
2018-02-24 17:23:10 +08:00
@frozenway 我手机上发的,错误贴出来
abusizhishen
2018-02-24 17:25:31 +08:00
@frozenway 第二个 select 里少了个 IP 字段,加上试试
fireapp
2018-02-24 19:57:29 +08:00
讲真,100w 条文本,awk 也就一分钟
aias
2018-02-24 20:30:48 +08:00
好多懂 MySQL 的。。
wwww961h
2018-02-24 20:39:51 +08:00
30W 数据 40 分钟,你这机器性能挺好
cxh116
2018-02-24 20:45:21 +08:00
有主键吗? count id,别 *
troywinter
2018-02-24 21:54:13 +08:00
加索引,还有 late row query
CodemonkeyM
2018-02-24 22:49:43 +08:00
不要*,加索引。
wayne1027
2018-02-24 23:15:54 +08:00
fatpa
2018-02-24 23:29:07 +08:00
加个索引不好么
CodemonkeyM
2018-02-25 00:05:53 +08:00
@wayne1027 unless you are using MyISAM....
usedname
2018-02-25 12:06:29 +08:00
30w 用得着加索引?明显是机器烂的不行
snBDX1b0jJM4ogKd
2018-02-25 21:37:08 +08:00
@CodemonkeyM @wayne1027 count(*)实际上是计数所有不全为 null 的列。当然会比 count(1)慢一些
dujiangbo
2018-04-02 17:57:13 +08:00
是不是存储引擎的原因?
前两天我的库 COUNT 一下都几十秒,而且运行越来越慢,一怒之下都改成了 myisam,速度立马飞起。
我的机器就是普通的 PC,数据几十万条吧。
YMB
2018-04-21 22:22:21 +08:00
数据库做查询的话,建议分表。
或者把数据同步到 es 去查

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

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

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

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

© 2021 V2EX