在本文中,并没有实现过程,算是一个提纲,当我们需要对MySQL进行优化的时候,可以通过本篇文章,了解一下,我们要对MySQL进行哪些优化,也算是对MySQL的优化先要有一个总体的认知。
因为如果要将所有的操作过程都放到这篇文章中,估计还没等看完,你就已经睡着了,具体的操作,我会在其他系列的博文中陆续的更新出来。
优化方向
- 数据表数据类型优化
- 索引优化
- SQL 语句优化
- 存储引擎的优化
- 数据表结构设计的优化
- 数据库服务器架构的优化
数据表数据类型优化
在做数据表结构类型优化时,我们需要考虑如下几点:
- 字段使用什么样的数据类型更合适
- 字段使用什么样的数据类型性能更快
Int: tinyint、smallint、bigint
在使用Int类型存储值的时候,一定要按需选择,需要对空间、范围进行考虑,比如存储年龄通常是0~120多,所以我们选择一个最小的tinyint类型,如果加上无符号那么最大值是255,足够我们存储年龄,选择smallint或者bigint明显是一种浪费。
char、varchar
char 的空间效率要比 varchar 要好,如果是存储电话号码,固定为11位,这种类似的需求,使用char要更好。
对于varchar存储一些可变的数据,如用户名。
enum
特性、固定的分类可以使用 enum 存储,效率更快。
一定要是固定的分类,如果将来的分类会变,就不适合使用enum,因为这样我们就需要去修改数据库表结构,扩展性会变得很差。
IP 地址的存储
IP 地址一般会采用字符型来进行存储,但是这种存储方式会带来很大的空间占用,我们可以使用整型来进行存储,PHP为我们提供了转换函数 ip2lang
索引优化
在做索引型优化时,我们需要考虑如下几点:
索引的创建原则
- 索引不是越多越好,在合适的字段上创建合适的索引,索引本身会影响我们的写操作的速度,并且会占用磁盘空间。
- 符合索引的前缀原则。
索引的注意事项
- 符合索引的前缀原则
- like 查询%的问题
- 全表扫描优化
- or 条件索引使用情况
- 字符串类型索引失效的问题
SQL 语句的优化
优化查询过程中的数据访问
优化长难句的查询语句
优化特定类型的查询语句
- 优化count()
- 优化关联查询
- 优化子查询
- 优化 Group by 和 distinct
- 优化 limit 和 union
存储引擎的优化
数据表结构设计的优化
分区操作
- 通过特定的策略对数据表进行物理拆分
- 对用户透明
- partition by
分库分表
数据库架构的优化
- 主从复制
- 读写分离
- 双主热备
负载均衡
- 通过
LVS
的三种基本模式实现负载均衡 MyCat
数据库中间件实现负载均衡。