慢 SQL 问题经验总结

1、导致慢SQL的原因在遇到慢SQL情况时,不能简单的把原因归结为SQL编写问题(虽然这是最常见的因素),实际上导致慢SQL有很多因素,甚至包括硬件和mysql本身的bug。根据出现的概率从大到小,罗列如下: SQL编写问题 锁 业务实例相互干绕对IO/CPU资源争用 服务器硬件 MYSQLBUG  2、由…

大家好,又见面了,我是你们的朋友全栈君。

1、 导致慢 SQL 的原因

在遇到慢 SQL 情况时,不能简单的把原因归结为 SQL 编写问题(虽然这是最常见的因素),实际上导致慢 SQL 有很多因素,甚至包括硬件和 mysql 本身的 bug。根据出现的概率从大到小,罗列如下:

  1. SQL编写问题

  2. 锁

  3. 业务实例相互干绕对 IO/CPU 资源争用

  4. 服务器硬件

  5. MYSQL BUG

 

2、 由 SQL 编写导致的慢 SQL 优化

针对SQL编写导致的慢 SQL,优化起来还是相对比较方便的。正如上一节提到的正确的使用索引能加快查询速度,那么我们在编写 SQL 时就需要注意与索引相关的规则:

  1. 字段类型转换导致不用索引,如字符串类型的不用引号,数字类型的用引号等,这有可能会用不到索引导致全表扫描;

  2. mysql 不支持函数转换,所以字段前面不能加函数,否则这将用不到索引;

  3. 不要在字段前面加减运算;

  4. 字符串比较长的可以考虑索引一部份减少索引文件大小,提高写入效率;

  5. like % 在前面用不到索引;

  6. 根据联合索引的第二个及以后的字段单独查询用不到索引;

  7. 不要使用 select *;

  8. 排序请尽量使用升序 ;

  9. or 的查询尽量用 union 代替 (Innodb);

  10. 复合索引高选择性的字段排在前面;

  11. order by / group by 字段包括在索引当中减少排序,效率会更高。

除了上述索引使用规则外,SQL 编写时还需要特别注意一下几点:

  1. 尽量规避大事务的 SQL,大事务的 SQL 会影响数据库的并发性能及主从同步;

  2. 分页语句 limit 的问题;

  3. 删除表所有记录请用 truncate,不要用 delete;

  4. 不让 mysql 干多余的事情,如计算;

  5. 输写 SQL 带字段,以防止后面表变更带来的问题,性能也是比较优的 ( 涉及到数据字典解析,请自行查询资料);

  6. 在 Innodb上用 select count(*),因为 Innodb 会存储统计信息;

  7. 慎用 Oder by rand()。

 

3、分析诊断工具

在日常开发工作中,我们可以做一些工作达到预防慢 SQL 问题,比如在上线前预先用诊断工具对 SQL 进行分析。常用的工具有:

  1. mysqldumpslow

  2. mysql profile

  3. mysql explain

具体使用及分析方法在此就不赘述,网上有丰富的资源可以参考。

 

4、误操作、程序 bug 时怎么办,解决方案

提出这个问题显然主要是针对刚开始工作的年轻同行们……实际上误操作和程序 bug 导致数据误删或者混乱的问题并非少见,但是刚入行的开发工作者会比较紧张。一个成熟的企业往往会有完善的数据管理规范和较丰富的数据恢复方案(初创公司除外),会进行数据备份和数据容灾。

当你发现误操作或程序 bug 导致线上数据被误删或误改动时,一定不能慌乱,应及时与 DBA 联系,第一时间进行数据恢复(严重时直接停止服务),尽可能减少影响和损失。对于重要数据(如资金)的操作,在开发时一定要反复进行测试,确保没有问题后再上线。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124757.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Scrapy库安装和项目创建建议收藏

    scrapy库安装使用pip命令安装scrapy,在安装过程中可能会因为缺少依赖库而报错,根据报错提示依次下载需要的依赖库,下载过程中注意系统类型和Python版本我在安装过程中依次安装的库有:

    2021年12月19日
  • 微信小程序图片预览功能_匿名聊天室小程序

    微信小程序图片预览功能_匿名聊天室小程序第一次写小程序,老板就让我用websoket写个聊天对话,群聊这种。第一次写聊天功能,第一次用websoket,第一次用小程序,这是在考验我吗?不过我还是研究了一下,终于实现了。首先看一下界面,界面很简单,就是首页刚进来获取了用户信息头像,昵称等。点击进入聊天室就可以聊天了,下面我介绍的是前端代码实现,后台需要做的很简单,就是你给他发送什么数据,他就给你返回什么数据,就是在接收前台发送过来的图…

    2022年8月30日
  • GIS,Silverlight「建议收藏」

    GIS,Silverlight「建议收藏」
    想学习Silverlight开发GIS,有兴趣的大家一起学习,286448010QQ,zhuqiang4433@hotmail.comMSN

    2022年7月17日
  • 微信小程序提交订单支付

    微信小程序提交订单支付主要是前端支付的几个部分**1.首先我们需要登录**通过wx.login这个api获取到code值,获取到code值后,我们请求登录的url并且把获取到的code拼接到url上,后台接收code值,登录成功后,返回openid,然后我们把获取到的openid存取到app.globalData里面2.我们支付点击按钮自己定义了一个方法pay()在方法里获取存在app.globalData里的openid然后通过支付的接口把openid传到后台返回参数res然后我们请求wx.request

    2022年6月3日
  • pycharm django环境搭建_django创建项目和应用的命令

    pycharm django环境搭建_django创建项目和应用的命令一、配置并准备你的环境1、首先,在设置里面选择好环境,这里我们使用python3.7(Ps:打开pycharm后—>File—>settings—>键入ProjectInterpreter),点击如下图所示的齿轮后出现Add。2、添加设置你自己安装的python后点击OK3、我们会看到现在都有什么东西,然后点击加号,下载django包。…

    2022年10月28日
  • http请求415错误Unsupported Media Type

    http请求415错误Unsupported Media Type王子乔每一个认真生活的人,都值得被认真对待王子乔每一个认真生活的人,都值得被认真对待王子乔每一个认真生活的人,都值得被认真对待http请求415错误UnsupportedMediaTy

    2022年7月1日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号