后端再进阶一步,MySQL 优化学习第1天

2022-01-06  本文已影响0人  梦想橡皮擦

任何一个后端工程师,都离不开数据库操作,而数据库中 MySQL 又是使用频率最高的一款,所以本系列专栏,将以3天一篇的频率,一起学习 MySQL 优化。

单表优化

从字段上,尽量使用 tinyintsmallintmediumint 作为整数类型,而不是用 int ,如果存储的值非负的话,再使用 UNSIGNED

这些数字只需要记住大概范围即可。

MySQL逻辑架构

MySQL逻辑架构可按照三层区分:

在这里翻阅资料的时候,碰到了一个新的概念,通信协议中的半双工机制,与之对应的有 单工通信半双工全双工

每个概念都可以进行简单的理解,例如:

基于这种机制,会出现如下场景,如果从客户端发送的数据包太大了,可能导致请求超时,反之服务器发送的数据过大,传输时间也会变长,所以我们要控制服务器(MySQL)给我们返回的数据,尽量避免使用 select * ,尽量加上 limit 限制返回条数。

这种操作的核心逻辑是降低通信数据包的大小和数量

存储引擎层

今天咱们一起学习的最后一部分是MySQL存储引擎层。

目前接触最多的是 MyISAM 和 InnoDB 两种引擎,可以针对单表进行设置。

2200682fcfec4c7285dd3b919e54e1eb[1].png

MyISAM

MyISAM 引擎是 MySQL 5.1 及之前版本的默认引擎,有如下内容:

InnoDB

InnoDB 在 MySQL 5.5 后成为默认引擎,它的特点是:

其它差别

InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描,当然如果加了 where 语句 ,二者差异不大。
MyISAM 用一个变量保存了整个表的行数,所以上述语句的执行速度很快;
InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。正是因为这个原因,一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限。

基于上述内容,如果执行大量的SELECT,选择 MyISAM,如文章表;如果执行大量的 INSERT或UPDATE ,优先选择 InnoDB 表,如订单表。

然后在翻阅资料的时候,又发现一句总结:没啥特殊的话请使用 InnoDB ,瞬间简洁了~~

记录时间

今天是持续写作的第 <font color=red>282</font> / 365 天。
可以<font color=#04a9f4>关注</font>我,<font color=#04a9f4>点赞</font>我、<font color=#04a9f4>评论</font>我、<font color=#04a9f4>收藏</font>我啦。

更多精彩


上一篇 下一篇

猜你喜欢

热点阅读