谈一谈你对MySQL性能优化的理解。
在硬件基础资源的优化中,我们重点应该关注服务本身承载的体量,然后提出合。MySQL 作为一种免费开源的关系型数据库,深受着互联网公司的喜爱。全局类的统一配置建议配置在默认配置文件中,否则重启服务会导致配置失效。读写分离设计,在读多写少的场景中,通过读写分离的方案,可以避免读写。数据库的应用全部无法响应。是一个经过互联网大厂验证过的生产级别的成熟数据库,对于。今天,我们就通过普通人与高手的形式,带大
·
MySQL 作为一种免费开源的关系型数据库,深受着互联网公司的喜爱。
因此,它也成为了技术面试官最常问的问题之一。
今天,我们就通过普通人与高手的形式,带大家深入了解
MySQL
的性能优化技
巧。
普通人
MySQL
的性能优化主要在于对
SQL
执行的优化
,
因为慢的
SQL
执行会带来不好
的用户体验
,
所以我们要关注
SQL
的执行时间
,
比如有些没有创建索引的列我们
要创建索引
.
不合理的联表查询我们要简化或者规避
.
比如
,
在我以前的一个项目
中
,
我的
SQL
没有索引执行
,
所以平均执行都需要很多的时间
.
后面我加上了索引
就好多了
.
高手
MySQL 的性能优化我认为可以分为 4 大部分
l
硬件和操作系统层面的优化
l
架构设计层面的优化
l MySQL
程序配置优化
l SQL
优化
硬件及操作系统层面优化
从硬件层面来说,影响
Mysql
性能的因素有,
CPU
、可用内存大小、磁盘读写
速度、网络带宽
从操作系层面来说,应用文件句柄数、操作系统网络的配置都会影响到
Mysql
性能。
这部分的优化一般由
DBA
或者运维工程师去完成。
在硬件基础资源的优化中,我们重点应该关注服务本身承载的体量,然后提出合
理的指标要求,避免出现资源浪费!
架构设计层面的优化
MySQL
是一个磁盘
IO
访问量非常频繁的关系型数据库
在高并发和高性能的场景中
.MySQL
数据库必然会承受巨大的并发压力,而此时,
我们的优化方式可以分为几个部分。
1.
搭建
Mysql
主从集群,单个
Mysql
服务容易单点故障,一旦服务器宕机,将
会导致依赖
Mysql
数据库的应用全部无法响应。 主从集群或者主主集群可以保
证服务的高可用性。
2.
读写分离设计,在读多写少的场景中,通过读写分离的方案,可以避免读写
冲突导致的性能影响
3.
引入分库分表机制,通过分库可以降低单个服务器节点的
IO
压力,通过分表
的方式可以降低单表数据量,从而提升
sql
查询的效率。
4.
针对热点数据,可以引入更为高效的分布式数据库,比如
Redis
、
MongoDB
等,他们可以很好的缓解
Mysql
的访问压力,同时还能提升数据检索性能。
MySQL 程序配置优化
MySQL
是一个经过互联网大厂验证过的生产级别的成熟数据库,对于
Mysql
数
据库本身的优化,一般是通过
Mysql
中的配置文件
my.cnf
来完成的,比如。
Mysql5.7
版本默认的最大连接数是
151
个,这个值可以在
my.cnf
中修改。
binlog
日志,默认是不开启
缓存池
bufferpoll
的默认大小配置等。
由于这些配置一般都和用户安装的硬件环境以及使用场景有关系,因此这些配置
官方只会提供一个默认值,具体情况还得由使用者来修改。
关于配置项的修改,需要关注两个方面。
l
配置的作用域,分为会话级别和全局
l
是否支持热加载
因此,针对这两个点,我们需要注意的是:
l
全局参数的设定对于已经存在的会话无法生效
l
会话参数的设定随着会话的销毁而失效
l
全局类的统一配置建议配置在默认配置文件中,否则重启服务会导致配置失效
SQL 优化又能分为三步曲
l
第一、慢
SQL
的定位和排查
我们可以通过慢查询日志和慢查询日志分析工具得到有问题的
SQL
列表。
l
第二、执行计划分析
针对慢
SQL
,我们可以使用关键字
explain
来查看当前
sql
的执行计划
.
可以重点
关注
type key rows filterd
等字段 ,从而定位该
SQL
执行慢的根本原因。再有
的放矢的进行优化
l
第三、使用
show profile
工具
Show Profile
是
MySQL
提供的可以用来分析当前会话中,
SQL
语句资源消耗情
况的工具,可用于
SQL
调优的测量。在当前会话中
.
默认情况下处于
show profile
是关闭状态,打开之后保存最近
15
次的运行结果
针对运行慢的
SQL
,通过
profile
工具进行详细分析
.
可以得到
SQL
执行过程中
所有的资源开销情况
.
如
IO
开销
,CPU
开销
,
内存开销等
.
以上就是我对
MySQL
性能优化的理解。
好的,看完高手的回答后,相信各位对 MySQL 性能优化有了一定的理解了,最
后我在给各位总结一下常见的 SQL 优化规则:
l SQL
的查询一定要基于索引来进行数据扫描
l
避免索引列上使用函数或者运算
,
这样会导致索引失效
l where
字句中
like %
号
,
尽量放置在右边
l
使用索引扫描
,
联合索引中的列从左往右
,
命中越多越好
.
l
尽可能使用
SQL
语句用到的索引完成排序
,
避免使用文件排序的方式
l
查询有效的列信息即可
.
少用
*
代替列信息
l
永远用小结果集驱动大结果集。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献6条内容
所有评论(0)