mysql优化主要分为:配置优化、sql语句优化、表结构优化、索引优化等等。
配置优化:
- 操作系统内核的优化
- mysql配置文件的优化
系统内核的优化对专业的mysql服务器来说,无非是内存使用、连接数、超时处理、TCP处理等方面的优化,根据自己的硬件配置来进行优化。
mysql配置的优化,一般包含:IO处理的常用参数、最大连接数设置、缓存使用的参数设置、慢日志的参数设置、innodb相关的参数设置等。
sql语句的优化:
- 对查询进行优化,尽量避免全盘扫描,首先考虑where和order by涉及的列上建立索引。
- 尽量避免在where子句中对字段进行null判断,否则将导致引擎放弃使用索引而进行全盘扫描,最好不要给数据库留null,尽可能的使用not null填充数据库。(可以在字段中设置默认值0,想确保字段是否null的时候判断是否等于0)
- 尽量避免在where子句中使用!=或<>操作符,否则引擎将放弃索引而进行全盘扫描。
- 尽量避免在where子句中使用or来连接条件,如果一个字段没有索引,一个字段有索引将导致引擎放弃使用索引。
- in和not in要慎用,对于连续的数值能用between就不要用in,很多时候exists代替in是很好的选择。
- 使用like的%放在前面也会导致全表扫描,若想提高效率考虑全文检索。
- 如果在where子句中使用参数也会导致全表扫描。
- 尽量避免在where子句中对字段进行表达式操作。
- 尽量避免在where中对字段进行函数式操作。
- 不要在where子句中的=左边进行函数,算数。
- update如果只更改1、2个字段不要update全部字段。
- 对于多张大数据量的表join,要先分页再join否则逻辑读会很高。
- 用具体的字段代替*。
表结构优化:
- 在满足需求的情况下,尽可能选择小的数据类型。
- 尽可能选择简单的数据类型。
- 尽可能将表字段都设成not null。
索引优化:
索引就是为特定的mysql字段进行特殊的算法排序,比如二叉树和哈希算法,哈希算法是通过建立特征值,根据特征值来查找。
mysql默认用的是二叉树算法btree,通过btree建立索引的字段。
- explain优化查询进检测:explain显示了mysql如何使用索引来处理select语句以及连接表,可以帮助选择更好的索引和写出更优化的查询语句
使用方法就是在select前面加上explain就可以。
mysql在执行一条语句之前,会对发出的每一条sql进行分析,决定是否使用索引或全盘扫描。 - 索引
索引的类型:
unique:唯一索引(不可以出现相同的值);
index:普通索引(允许出现相同的索引内容);
primary key :主键索引(不允许出现相同的值,且不能null值,一个表中只能由一个);
fulltext index:全文索引(可以针对之中的某个单词) - 索引的curd
索引的创建:alter table 表名 add 索引类型 【索引名】(字段名)
create index和create unique可对表增加普通索引或唯一索引
删除:drop index ‘index_name’ on ‘table_name’删除主键索引只能用alter table ‘table_name’ drop primary key
查看show index from tablename \G - 创建索引的技巧
1)维度高的列创建索引(维度代表列种不重复值出现的个数比如[a,b,c,d,a,a,d,d]维度为4);
2)对where,on,group by,order by中出现的列使用索引。
3)对较小的数据列使用索引。
4)为较长的字符串使用前缀索引。
5)不要过多的创建索引。
6)使用组合索引,可以减少文件索引的大小,在使用时速度要优于单列索引;