首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >[MYSQL] mysql 慢SQL优化 (半小时优化到半秒)

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

原创
作者头像
大大刺猬
发布2024-07-05 15:15:37
发布2024-07-05 15:15:37
3530
举报
文章被收录于专栏:大大刺猬大大刺猬

导读

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

sql参考如下 (特殊说明: 如下出现的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 也是全扫, 不要被误导了. (联合索引)).

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

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

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

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

代码语言:sql
复制
alter table db1.sbtest2 add index t2_c(c);

本案例还是比较简单的.

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

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • 排查过程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档