MySQL 查询数据太慢了,该怎么优化?

2021-12-27 12:02:10 +08:00
 182247236

sql 执行语句 SELECT timestrap, bps FROM cdn_bandwidth WHERE (company_id = 1 AND domain_id IN (242,292,194,264,217,195,203,200,198,221,227,335,167,243,261,218,196,176,174,162,161,160,170,173,325,169,324,171,236,241,220,256,276,186,263,254,286,287,285,288,283,278,291,215,334,260,321,316,318,319,323,322,163,159,213,207,238,274,164,333,280,249,247,246,252,273,255,181,180,248,226,178,179,293,265,301,237,175,240,262,166,305,326,304,165,177,259,225,183,214,193,197,206,290,257,258,219,189,172,209,267,210,271,272,229,302,300,303,275,320,239,284,205,208,182,191,190,277,250,298,295,297,269,216,187,232,230,231,251,185,294,244,245,281,168,268,188,184,223,202,222,192,224,332,282,199,270,266,289,296,234,253,201,233,235,279,211,315,228,204,212) AND time BETWEEN '2021-12-01 00:00:00' AND '2021-12-26 23:59:59')

查询出 1038259 条数据,共花费时间 125 秒。太长时间了。有没有办法能优化下。

7920 次点击
所在节点    MySQL
84 条回复
harde
2021-12-27 12:59:13 +08:00
索引是什么样子的,顺便也贴一下。即使单表上千万条,你这个业务查询也不需要这么久
icaca
2021-12-27 13:02:38 +08:00
一千万查一百万数据出来,走不走索引,差别都不大的
icaca
2021-12-27 13:08:53 +08:00
建议你在业务层优化下,单独起个服务做统计吧。
rsyjjsn
2021-12-27 13:37:25 +08:00
前端门外汉,不过我司貌似每天都在扯千万级别的数据量,解决都是分表分库
liyunyang
2021-12-27 13:44:11 +08:00
期待一下后续
wolfie
2021-12-27 13:52:51 +08:00
贴 explain 啊。
force 联合索引看看。
lolizeppelin
2021-12-27 13:53:05 +08:00
换 pg 上时序 哈哈哈哈
duhui
2021-12-27 13:54:01 +08:00
>每个域名每 5 分钟一条数据

能不能每天统计一次, 然后一个月的话就算 30 天
justfindu
2021-12-27 13:59:44 +08:00
不如另外跑一个数据归档吧. 比如按天归档, 这样数据量就可以降低 288 倍. 你这个查出来的数据量很大, 有没有索引真的差别不大了.
Soar360
2021-12-27 14:00:31 +08:00
查询出 1038259 条数据

这么多数据,仅仅是查出来,就算走索引网络传输也要好久了吧。我觉得你需要中间表了。
zibber
2021-12-27 14:01:57 +08:00
in 查询条件多了会不走索引
akira
2021-12-27 14:08:50 +08:00
另外建一个每日数据汇总表,每天统计一次。
每月的这个汇总表就可以直接基于每日的汇总就好了
justicelove
2021-12-27 14:13:37 +08:00
1. 表按时间分区
2. 试试对 domain_id 创建一个直方图
roiding
2021-12-27 14:18:41 +08:00
in 这么多字段 你确定走了索引?
182247236
2021-12-27 14:19:55 +08:00
@harde 好滴!
182247236
2021-12-27 14:21:04 +08:00
@wolfie 刚贴了 explain ,force 不太懂是啥 lol
28Sv0ngQfIE7Yloe
2021-12-27 14:25:00 +08:00
看起来你需要一个 OLAP 数据库,或者离线处理?
182247236
2021-12-27 14:25:15 +08:00
我用 zabbix 或者别的一些数据监控,他们的都是 1 分钟存一条数据,数据量比我的大多了,怎么别人的查询就这么快...
wolfie
2021-12-27 14:32:04 +08:00
@182247236 #36
这索引就过滤一个 company_id

from table
force index() -- 这里添加 force ,括号值写 unique 索引全名
where ... ...
jenlors
2021-12-27 14:38:33 +08:00
为什么要使用 unque 类型的索引,试试强制使用那个联合索引,按理说可以使用到这个索引

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

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

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

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

© 2021 V2EX