MySQL性能优化全攻略:6大必备技巧

发表时间: 2023-04-07 18:29

上篇写了最全性能优化详解(9大必备大厂优化方案),把整个性能优化的框架建立起来了,下面我就接着详谈重要的MySQL优化方案,这里会涉及到慢查询、索引、表设计等的优化方式,下面我就一一来详解这些关键点@mikechen

MySQL优化方案

MySQL的优化大体可以分为三部分:索引的优化,sql语句的优化,表的优化,下面我就一一来详解这3大优化方案@mikechen

索引优化

1.索引

一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的也是最容易出现问题的,还是一些复杂的查询操作,因此对查询语句的优化是重中之重,加速查询最好的方法就是索引。

索引在数据库中的作用类似于目录在书籍中的作用,用来提高查找信息的速度。

如下图所示:


索引的目的在于提高查询效率,与我们查询图书所用的目录是一个道理:先定位到章,然后定位到该章下的一个小结,然后找到页数。相似的例子还有:查字典,查地图等。


建立索引的原则

a. 定义主键的数据列一定要建立索引。

b. 定义有外键的数据列一定要建立索引。

c. 对于经常查询的数据列最好建立索引。

d. 对于需要在指定范围内的快速或频繁查询的数据列;

e. 经常用在WHERE子句中的数据列。

f. 经常出现在关键字order by、group by、distinct后面的字段,建立索引。如果建立的是复合索引,索引的字段顺序要和这些关键字后面的字段顺序一致,否则索引不会被使用。

g. 对于那些查询中很少涉及的列,重复值比较多的列不要建立索引。

h. 对于定义为text、image和bit的数据类型的列不要建立索引。

i. 对于经常存取的列避免建立索引。


SQL慢查询优化

1.首先是捕获低效sql

1)slow_query_log

这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句。

2)ong_query_time

当SQL语句执行时间超过此数值时,就会被记录到日志中,建议设置为1或者更短。

3)slow_query_log_file

记录日志的文件名。

4)log_queries_not_using_indexes

这个参数设置为ON,可以捕获到所有未使用索引的SQL语句,尽管这个SQL语句有可能执行得挺快。

2.慢查询优化的基本步骤

1)先运行看看是否真的很慢,注意设置SQL_NO_CACHE

2)where条件单表查,锁定最小返回记录表。这句话的意思是把查询语句的where都应用到表中返回的记录数最小的表开始查起,单表每个字段分别查询,看哪个字段的区分度最高

3)explain查看执行计划,是否与1预期一致(从锁定记录较少的表开始查询)

4)order by limit 形式的sql语句让排序的表优先查

5)了解业务方使用场景

6)加索引时参照建索引的几大原则

7)观察结果,不符合预期继续从1开始分析

2.优化原则

可以采用以下策略来优化索引性能:

  • 使用EXPLAIN语句分析查询语句,并优化查询语句,以充分利用索引。
  • 查看慢查询日志,找出执行时间长的sql语句优化
  • 多表连接时,尽量小表驱动大表,即小表 join 大表


数据库优化

数据表拆分:主要就是垂直拆分和水平拆分。



1.优先考虑缓存降低对数据库的读操作。

2.再考虑读写分离,降低数据库写操作。

3.最后开始数据拆分,切分模式: 垂直(纵向)拆分、水平拆分。

4.首先考虑按照业务垂直拆分。

5.再考虑水平拆分:先分库(设置数据路由规则,把数据分配到不同的库中)

6.最后再考虑分表。

以上

更多分布式架构系列、阿里架构师进阶系列,请查看以下文章:

阿里架构师进阶从0到1全部合集(建议收藏)