mysql学习专题
mysql 专栏
mysql cpu >=100% 排查
查询正在占用mysql的 sql语句
1 | # mysql数据集 root权限的用户 |
| Id | User | Host | db | Command | Time | State | Info |
|---|---|---|---|---|---|---|---|
| 363 | root | 39.170.43.242:3721 | gwdb | Sleep | 29 | ||
| 364 | root | 39.170.43.242:3722 | gwdb | Query | 0 | init | /* ApplicationName=DBeaver Enterprise 21.0.0 - SQLEditor <Script.sql> */ show full processlist |
其中 state 是run 的,表示正在抢占mysql 资源
time 表示占用的时间
优化1 :索引
根据查询到的sql,统计表中记录数量大小
如果超过十万级,可以根据 where 字段添加索引
经过验证,三层嵌套的sql,在加上索引后,速度提高了将近2倍
优化2:sql
如果已添加索引,则需要分析sql,将 sql拆分,一段一段执行,探究哪一段执行较为缓慢
这一段 一般是用了mysql的内置函数,例如 data,str 等
需要替换为 用后端语言计算好后的sql,避免mysql 执行过慢
mysql查询优化
怀疑select *
- select * 不会走索引,变成全表扫描
- select * 会返回冗余信息
衡量查询性能的指标
响应时间、扫描的行数、返回的行数
mysql 查询范围
速度:满 -> 快,查询行数:多 -> 少
全表扫描 -> 索引扫描 -> 范围扫描 -> 唯一索引查询 -> 常数索引
例如有索引(唯一索引)时,sql 在 mysql 上会优化为如下:
当删除索引,再次 查询,则sql 会被mysql 优化器识别为全表扫描