如何对 mysql 进行优化的问题

2020-12-29 08:46:57 +08:00
 lopetver

如下图,mysql 慢日志记录到的查询语句,目前 mysql 的 CPU 使用率达 70%左右

目前这个 d_lampblack_real_time 表中有 2000W 行的数据,请教下各位大佬该如何优化下。

3957 次点击
所在节点    MySQL
41 条回复
xuanbg
2020-12-29 08:52:37 +08:00
执行计划发出来
huichao
2020-12-29 09:00:56 +08:00
你的 avg, 单独写在一个 function 可能会好点儿, 所有的查询,基本都是先加条件拿出来较少的数据,再来进行其他的逻辑操作,会快很多。
lopetver
2020-12-29 09:01:10 +08:00
@xuanbg 你好,5 分钟执行一次,这个是通过每分钟的数据,来计算 5 分钟报表的
l00t
2020-12-29 09:09:08 +08:00
@lopetver #3 执行计划不是这个意思…… 执行计划是指数据库对这条语句的执行计划。你 explain 一下看看。
yeqizhang
2020-12-29 09:09:57 +08:00
别问,问就是加索引
l00t
2020-12-29 09:10:04 +08:00
表里总共 2000 多万数据,你查个 5 分钟也扫了 2000 多万,我怀疑你是不是没加索引。
aitaii
2020-12-29 09:12:48 +08:00
2000 万不应该这么慢,explain 看看,索引该加加,别乱加就行
lijialong1313
2020-12-29 09:13:39 +08:00
@l00t 查询时间看起来是没命中索引吧。

而且这个 where 1=1 怎么……看着好怪
aitaii
2020-12-29 09:14:37 +08:00
另外 oltp 做统计很蛋疼,交给 olap 去做
totoro52
2020-12-29 09:21:20 +08:00
不要 1=1 必全表扫描 explain 看下执行计划
zhaokun
2020-12-29 09:28:52 +08:00
根据条件先查 ID,拿到 ID 集合再拿其他信息,avg 可以考虑放到代码实现
v2orz
2020-12-29 09:42:32 +08:00
@totoro52 1=1 真的会不走索引吗?个人认为是不影响的
UnAmico
2020-12-29 09:50:35 +08:00
@totoro52 MySQL 有查询优化器, 1=1 会被优化掉
yveJohn
2020-12-29 09:51:47 +08:00
@lopetver #3 执行计划不是说 sql 多久执行一次,而是通过 mysql 的 explain 关键字查看 SQL 在数据库中执行时的表现.如 explan select * from table;
securityCoding
2020-12-29 09:58:52 +08:00
@zhaokun monitor_time 有索引的话会回表的 , 楼主这个不发执行计划就只能去瞎猜了
lopetver
2020-12-29 09:59:37 +08:00
@xuanbg
@yveJohn

执行结果如下

MySQL [lampblack]> explain select * from d_lampblack_real_time;
+----+-------------+-----------------------+------------+------+---------------+------+---------+------+---------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-----------------------+------------+------+---------------+------+---------+------+---------+----------+-------+
| 1 | SIMPLE | d_lampblack_real_time | NULL | ALL | NULL | NULL | NULL | NULL | 5254449 | 100.00 | NULL |
+----+-------------+-----------------------+------------+------+---------------+------+---------+------+---------+----------+-------+
1 row in set, 1 warning (0.02 sec)
ymz
2020-12-29 10:00:09 +08:00
1 = 1,查询字段又不仅仅是索引字段,估计扫全表了
kimqcn
2020-12-29 10:03:06 +08:00
参考一个类似的老问题:根据 IP 查地址。
ymz
2020-12-29 10:03:56 +08:00
@lopetver type = all,没用索引
raptor
2020-12-29 10:05:04 +08:00
两步:explain, 加索引

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

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

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

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

© 2021 V2EX