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 秒。太长时间了。有没有办法能优化下。

7919 次点击
所在节点    MySQL
84 条回复
harde
2021-12-27 12:17:49 +08:00
没索引吧?
gadfly3173
2021-12-27 12:18:32 +08:00
https://github.com/XiaoMi/soar 可以试试这个 不过看你的数据量也优化不了什么了。。。
jenlors
2021-12-27 12:18:44 +08:00
执行计划贴一下
harde
2021-12-27 12:18:54 +08:00
单表数据量多大? 提问题的同时请让大家尽可能多的了解你的情况
cheng6563
2021-12-27 12:19:03 +08:00
给 time 上索引
icaca
2021-12-27 12:25:06 +08:00
125s 肯定没走索引,表也不大
把所有列都加上索引。然后尽量把 in 换成 join 。
优化到 100 毫秒应该没问题的。
des
2021-12-27 12:27:39 +08:00
“ 查询出 1038259 条数据” 好好想想,你页面需要展示这么多数据?
cloverzrg2
2021-12-27 12:33:52 +08:00
数据返回时间多少秒?
182247236
2021-12-27 12:35:32 +08:00
@des 查询出来的数据还需要写个 sum ,查询就这么慢了我就用 python 处理了,所以实际到最后的数据没有这么多的,就是查询这部太久了
182247236
2021-12-27 12:37:49 +08:00
@cloverzrg2 这个在哪里看?我是看 navcat 右下角 elapsed time 的
182247236
2021-12-27 12:40:26 +08:00
@harde 都加了 NORMAL BTREE 索引的
182247236
2021-12-27 12:42:11 +08:00
@harde 目前表单数量 11126889
vanton
2021-12-27 12:42:16 +08:00
explain 贴一下吧,你这样啥都看不出
cloverzrg2
2021-12-27 12:42:27 +08:00
@182247236 #10 可能有个 transfer data 之类的时间,你可以简单把 sql 改成 select (*) from 执行看一下时间
kujio
2021-12-27 12:52:46 +08:00
1.将数据按时间拆分成多个表:减少查询范围,
2.查询结果看看在业务上能不能拆分:减少查询结果,
182247236
2021-12-27 12:53:33 +08:00
@long2ice 我这边贴出来了
182247236
2021-12-27 12:55:32 +08:00
@vanton 收到
gesse
2021-12-27 12:56:56 +08:00
按照你的表查询的内容、数据量来说, 其实应该可以从几个方面来优化:
1. 按照历史日期分表
2. 按数据活跃度分表
3. 历史不会修改数据放入只读数据库,加快数据检索速度 https://help.aliyun.com/document_detail/26136.html
……
等等
182247236
2021-12-27 12:57:35 +08:00
@icaca append 了,麻烦大佬看下
harde
2021-12-27 12:58:20 +08:00
@182247236 贴一下 Explain 的。

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

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

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

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

© 2021 V2EX