MySQL性能优化对许多数据库从业人员来讲,是一个十分繁杂的难题,而大部分原因在于对数据库出错的细节和解决的思路不够清晰。因此,在MySQL性能优化前,先要掌握的便是MySQL的内部逻辑,许多的性能优化事实上便是遵照规范让MySQL的优化器可以依照预期的有效方式来运作。
一、MySQL性能优化的过程
利用慢查询,定位查询時间较长的SQL句子。
利用 explain 指令观察优化不足的SQL执行计划。
利用 showprofile[s] 观察SQL的性能消耗状况。
二、MySQL数据库性能优化技术
一般来说,要确保数据库维持在高效状态,要在这几个方面集中注意力:
数据库结构设计优化
sql语句优化
数据库参数配置
适当的硬件资源和操作系统
三、MySQL性能优化——索引优化
1.遵循最左前缀原则
利用联合索引开展查询时,从索引的最左前列开始,不绕过索引中的列而且不要用范围查询(>、
2.模糊查询时不要使用索引(like ‘%XX’ 或是 like ‘%XX%’)
假如要用类似 where column like ‘%AB’ 条件时,因为标准前边是模糊不清的,因此不可以运用索引,只能逐一查询,判断是否符合条件,于是便会造成全索引扫描或是全表扫描。
而像 where column like ‘A%’ ,就可以检索A开始的数据,当遇到B开始的数据信息时,就停止向下检索,这样就能够提升查询高效率。
3.尽量拓展索引
过多的索引会占有大量的室内空间,并且每一次增、删、改实际操作都是复建索引。
加入已经有索引(a),如今又要对(a,b)开展索引,那麼只必须改动索引(a)就可以,防止多余的索引带来数据冗余。
4.索引不参与实际操作
不要对索引列进行操作,包含计算、函数、数据转化等,这些操作都会造成索引无效。
5.添加索引的注意事项
频繁作为查询条件的字段;
唯一性很差的字段上不宜创建索引;
经常更新的字段上不宜创建索引;
四、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 进行分页,注意控制页大小。