[MYSQL] mysql 慢SQL优化 (半小时优化到半秒)

3天前 11.2k 0

导读

在 mysql 5.7环境, 两个 10W行数据左右的表, 做left join 耗费 半小时.

sql参考如下 (特殊说明: 如下出现的sql和表均为测试模拟的)

select count(1) from db1.sbtest1 t1 left join db1.sbtest2 t2 on t1.c=t2.c and t1.pad=t2.pad;

排查过程

首先看执行计划, 发现rows基本上和表大小一致 (实际环境, type:index 也是全扫, 不要被误导了. (联合索引)).

[MYSQL] mysql 慢SQL优化 (半小时优化到半秒)-1

查看更详细的执行计划 (format=json) 发现存在字符集转化问题.

查看表结构, 发现两个表字符集不一样. 故要求其整改. 但字符集转化影响应该不大. 还是得看看为啥是全表扫描.

查看表DDL, 发现ON字段没得索引…

如果是8.0的话, 没得索引还可以使用hash join, 速度也是非常快的. 但是5.7 没得索引就贼慢. 加上索引之后速度就快了(不到0.5秒)

alter table db1.sbtest2 add index t2_c(c);

[MYSQL] mysql 慢SQL优化 (半小时优化到半秒)-2
[MYSQL] mysql 慢SQL优化 (半小时优化到半秒)-3

本案例还是比较简单的.

分享这个案例的另一个原因是: 沟通的时候, 开发说有没得索引区别真没那么大.

mysql查询数据索引的影响是很大的, 基本上90%的优化都能通过加减索引来实现.

参考: https://dev.mysql.com/doc/refman/8.0/en/hash-joins.html

相关文章

使用BBED修复delete的数据
Oracle数据库安全加固记录
深入揭秘:MySQL中MVCC的神奇原理
pt-table-sync工具的使用(一)
技术分享 | MySQL 生产环境 GROUP BY 优化实践
ORACLE数据库备份和恢复

发布评论