mysql 优化主要分为以下四个方面
设计:存储引擎,字段类型,范式与反范式
功能:索引,缓存,分区分表
架构:主从复制,读写分离,负载均衡,
合理sql,测试,经验
这这是一个概括,其实都看过了,只是在这汇总一下
存储引擎
InnoDB引擎,支持事务,行级锁定,外键约束,事务安全型存储事务,更加注重数据的完整性和安全性,数据按照主键顺序存储,插入的时候做排序工作,效率低
擅长事务,数据的完整性,以及高并发处理,不擅长快速插入,和检索
Mylsam引擎,擅长处理高速读跟写,存储顺序为插入顺序,插入速度快,空间占用小,支持全文索引,(5,7之后innodb好像也支持了),支持数据压缩,表锁,不支持高并发,支持并发插入,不会堵塞其他操作
字段类型
字段类型应该要满足需求,尽量要满足以下需求,
尽可能小(占用存储空间少),尽可能定长(占用存储空间固定),尽可能使用整数
1.列类型之数值
根据实际使用场景,长度,类型,取不同的字段类型,
整型,浮点型,定点型(相比于浮点型更精确,内部存储时字符串,而不是近似值)
2.列类型之日期
日期也有很多类型 DATE、DATETIME、TIME、YEAR、TIMESTAMP。
各自都有存储的值跟范围,有的时年,有的是年月日,有的是完整的
如果存储的是时间戳可以用nit(11)来存储,占用字节少,存储索引空间小,查询快,排序效率高,
3.列类型之字符
字符集校对规则,utf8_general_ci 表示校对时不区分大小写,行对的cs表示区分大小写,还有一个bin结尾的时字节比较,而ganeral是地区名这里是通用,utf8表示编码,
提供了多种字符数据类型,包括:CHAR、VARCHAR、VARBINARY、BLOB、TEXT、ENUM和SET等多种字符类型。
短文本定长用char,变长用varchar,长文本用text
4.列类型之属性
无符号(UNSIGNED)和填充零(ZEROFILL),还有是否为空、默认值、主键、自动编号。
范式与反范式
为了建立冗余较小,结构合理的数据库,需要遵循的规则:范式
但是为了提高数据库的性能,通过增加冗余和重复数据的方式,就是反范式

sql 优化

对于并发性的sql,少用(不用)多表操作(子查询,联合查询),而是将复杂的sql拆分多次执行,如果查询很原子很小,会增加查询缓存的利用率,
大量数据的插入,先关闭索引,完成插入后,再重新生成索引,
尽量避免全表扫描,考虑再where 和order by涉及的列上建立索引
尽量使用数字型字段,因为比对是一个字符一个字符取比对,对此,而数字只需要一次
慢日志的使用
以下情况会导致不使用索引,而扫表
where中对字段进行null判断
使用一些!=,<>,操作符
在where中使用函数操作
在where子句中的‘=’左边使用算数,运算