[打造高性能MySQL]MySQL性能优化详解


MySQL性能优化对许多数据库从业人员来讲,是一个十分繁杂的难题,而大部分原因在于对数据库出错的细节和解决的思路不够清晰。因此,在MySQL性能优化前,先要掌握的便是MySQL的内部逻辑,许多的性能优化事实上便是遵照规范让MySQL的优化器可以依照预期的有效方式来运作。

一、MySQL性能优化的过程

  1. 利用慢查询,定位查询時间较长的SQL句子。
  2. 利用 explain 指令观察优化不足的SQL执行计划。
  3. 利用 showprofile[s] 观察SQL的性能消耗状况。

二、MySQL数据库性能优化技术

一般来说,要确保数据库维持在高效状态,要在这几个方面集中注意力:

  • 数据库结构设计优化
  • sql语句优化
  • 数据库参数配置
  • 适当的硬件资源和操作系统

三、MySQL性能优化——索引优化

1.遵循最左前缀原则

利用联合索引开展查询时,从索引的最左前列开始,不绕过索引中的列而且不要用范围查询(>、<、between、like)。

2.模糊查询时不要使用索引(like ‘%XX’ 或是 like ‘%XX%’)

假如要用类似 where column like ‘%AB’ 条件时,因为标准前边是模糊不清的,因此不可以运用索引,只能逐一查询,判断是否符合条件,于是便会造成全索引扫描或是全表扫描。

而像 where column like ‘A%’ ,就可以检索A开始的数据,当遇到B开始的数据信息时,就停止向下检索,这样就能够提升查询高效率。

3.尽量拓展索引

过多的索引会占有大量的室内空间,并且每一次增、删、改实际操作都是复建索引。

加入已经有索引(a),如今又要对(a,b)开展索引,那麼只必须改动索引(a)就可以,防止多余的索引带来数据冗余。

4.索引不参与实际操作

不要对索引列进行操作,包含计算、函数、数据转化等,这些操作都会造成索引无效。

5.添加索引的注意事项

  1. 频繁作为查询条件的字段;
  2. 唯一性很差的字段上不宜创建索引;
  3. 经常更新的字段上不宜创建索引;

四、MySQL性能优化——sql语句优化

  • 通过limit对查询结果数目开展限制;
  • 不要使用select*,只需将必要的字段查询出来
  • 利用连接(join)来替代子查询;
  • 拆开复杂的delete或insert句子;
  • 不做列计算:比如 SELECT id WHERE age+1=10,一切对列的实际操作都将造成全表扫描,查询时要尽量将实际操作挪到等号右侧;
  • sql语句尽量简易:一条sql在一个cpu中计算;将复杂sql语句进行拆分,可以降低锁時间,防止整个数据库被锁;
  • OR变成IN:OR的查询是n级別,IN的查询效率是log(n)级別;
  • 比较时尽量选择相同数据类型:例如用’123’和’123’比,123和123比;
  • 尽量减少在WHERE子句中应用!=或<>操作符;
  • 列表数据不拿全表:先通过 LIMIT 进行分页,注意控制页大小。

MySQL性能优化与 redis和mysql的数据一致性也有一定的关系,方法详见《redis缓存一致性怎么保证?》


评论区(0)

评论