关于MySQL慢查询的学习心得

资料来源网络学习。

问题背景:
在工作中遇到一个问题,这个问题是这样的,我新开发的模块在查询时,开发库上很快,切到测试库上就巨慢,经过调试,发现调用一个公用的存储过程中有一个查询很慢,ok,问题就是它了,但是只是库不一样,怎么性能差距这么大呐,纳了闷了!

解决过程如下:
一、有人说是数据量的问题,我就看了下两个库的数据,开发库反而比测试库多了一百多万条数据,这。。。肯定不是这个原因。
二、然后我就怀疑是索引问题,点开发库中的表是有索引的,而测试库的表是没有索引的,woca,不应该是一样的脚本吗!谁埋得坑,fuck!
三、加上索引后一切豁然开朗,速度是真快了不少,等等,我发现代码还有优化的空间,去除 *,去除like,去除in,优化后速度又快了一点,优化部分可查看总结。

总结:
1.添加索引,主键和需要经常查询的字段都要添加
2. 避免使用 *,指定具体字段
3. 用exists替代in,当然也可以用not exists替代not in
4. 避免使用like,能不用模糊查询就不用

这里提出的几点优化思路和问题排查思路都非常好,一步一步定位并解决问题。关于总结部分,做一些补充:

1. 主键本身就是索引,按照主键查询记录效率是最高的;如果有多个字段都需要有索引,且是同时查询(即 where 条件有多个),一定要使用联合索引

2. 如果表中包含的列特别多(例如超过20个),或者其中的几列存储的数据过大(例如 mediumtext 类型)。那么,只查询需要的列,不要使用 select *

3. exists 会比 in 的查询效率高,数据量大的时候会有明显的速度提升

4. 使用 like 时,很多情况下不能使用到索引。所以,效率会降低很多,不要把耗时的操作放在数据库里做,即能不用模糊查询就不用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值