mysql的优化可以分为四种:
架构优化、设计优化、使用优化、查询优化
架构优化:
1.数据量大:分库分表
水平分库:将一个库的数据放到不同的服务器上
垂直分库:将一个库的相关联的表,放到不同的数据库中
水平分表: 将一个表的数据分到多个表中
垂直分表:将一个表的字段放到不同的表中
2.并发量大
建立mysql集群,主从复制:分为一主一从,一主多从
读写分离:主数据库负责增删改,从数据库负责查询(主数据库在写入数据后会记录到bin.log中,从数据库会将数据同步过来)
还可以使用中间件:
shading-jdbc,mycat等
设计优化:
使用范式和反范式:
使用范式可以便于修改,降低查询的效率
使用反范式能够提高查询,但是会降低修改的效率
选择合适的数据库引擎:
innoDB:数据库的默认引擎,它支持事务,支持表锁,行锁,安全性高,支持数据恢复,查询效率低。
myIsam:它不支持事务,支持全文索引,查询时会保留数据的行数,只支持行锁,查询效率高,不支持数据恢复。
1.字段优化:主键
必须设置主键,
尽量不使用业务字段作为主键,
int自增的效率高于UUID
2.数据类型:
尽量使用varchar,不适用char(前者储存空间更小,利于查询)
尽量使用小的数据类型
有限的数据,尽量使用枚举而不是varchar
3.尽量使用notNULL约束
使用优化:加索引,加缓存(mybatis,redis缓存),使用连接池(HiKari,c3p0),分页查询
查询优化:
尽量避免使用select * 查询
查询之前尽量使用explain查看程序计划
尽量避免where中使用函数或者表达式
尽量避免模糊查询时,将%写在前面
尽量避免where中使用or,union代替
尽量使用exists代替in