问题

**请简述下你对MySQL性能优化的理解?**

回答

MySQL性能优化可分为四部分

1、硬件和操作系统层面的优化;
2、架构设计层的优化;
3、MySQL程序配置优化;
4、SQL执行优化;

  • 硬件和操作系统层面的优化

从硬件层面来说,影响到MySQL性能因素主要是CPU、可用内存大小、磁盘读写速度、网络带宽;
从操作系统层面来说,影响到MySQL性能因素,应用文件句柄数、操作系统的网络配置; 这部分的优化主要是由DBA或运维工程师去完成。
在硬件基础资源的优化中,我们重点应该关注的是服务本身所承载的体量,然后提出合理的指标要求,避免出现资源浪费的现象。

  • 架构设计层的优化

MySQL是一个磁盘IO访问非常频繁的关系型数据库,在高并发和高性能的场景中,MySQL数据库必然会承载着巨大的并发压力。
我们可以通过多种方式进行优化,主要可以分为几个部分:
1、搭建MySQL主从集群,保证服务的高可用性
单个MySQL服务出现单点故障时,一旦宕机,将会导致依赖该MySQL数据库的应用全部无法响应。
2、引入读写分离设计
在读多写少的场景中,通过读写分离的方案,可以去避免读写冲突导致的性能问题。
3、引入分库分表的机制
通过分库的方式,可以降低单个服务器节点的IO压力,通过分表的方式,可以去降低单表数据量,从而提升sql查询效率。
4、针对热点数据,引入非关系型数据库,比如Redis、MongoDB等
内存非关系性数据库,可以很好的缓解MySQL的访问压力,同时提升数据的检索性能。

  • MySQL程序配置优化

对MySQL数据库本身的优化可以通过MySQL配置文件my.cnf来完成。比如说MySQL5.7版本,默认的最大连接数是151个,这个值可以在my.cnf中去修改;第二个binlog日志,默认不开启,也可以在这个文件中去修改开启;第三个是缓存池BufferPool默认大小配置。官方会提供一个默认的配置,具体的情况还需要由使用者根据实际情况进行修改。

  • SQL执行优化

SQL优化可以分为三个步骤:
第一个,慢sql的定位和排查。
我们可以通过慢查询日志和慢查询日志工具分析得到有问题的SQL列表;
第二个,执行计划分析。
针对慢查询日志,我们可以使用关键字explain来查看当前sql的执行计划,可以重点关注type、key、rows、filterd等字段,从而去定位该sql执行慢的根本原因,再去针对性的优化;
第三个,使用show profile工具。
该工具是MySQL官方提供的,主要是分析sql语句资源消耗情况,可以用于sql调优的测量,默认不开启,开启后会记录当前会话的最近15次的运行结果。针对运行慢的sql语句,通过show profile工具进行详细分析,可以得到sql执行过程中所有资源的开销情况,比如IO开销、CPU开销、内存开销等等。

常见的sql语句优化的规则

1、sql语句查询一定要基于索引来进行数据扫描;
2、避免索引列上使用函数或运算符;
3、模糊查询的时候,尽量把%放置在右边;
4、使用索引扫描,联合索引中的列按从左到右,命中越多越好;
5、尽可能使用sql语句用到的索引完成排序,避免使用文件排序的方式;
6、查询语句尽量不用*,而用有效的列信息即可;
7、永远用小结果集驱动大结果集;

以上,是对于MySQL性能优化的一个理解。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐