mysql优化概述
设计: 储存引擎,字段类型,范式。
功能: 索引,缓存,分区。
架构:主从复制,读写分离,负载均衡。
合理的sql:测试和经验。
储存引擎
表引擎--某一种数据的储存格式。一般叫某一种文件系统。
一般用到四种引擎 innodb ,myisam ,Archive , Memory
innodb :事务(多条sql语句全部执行完毕。才算完成操作),外键约束,数据的完整性(可通过binlogo入职恢复数据),擅长并发处理,行级锁定(逐个完成该行的操作。需排队)。表锁定(逐个完成该表的操作。需排队),mvcc特性(多版本并发控制,效果达到无阻塞读操作)。(5.6以上的innodb也支持全文索引)
myisam :支持全文索引。数据压缩存储,高速查询及插入,不会阻塞读写操作。
Archive :存档型,一般用于日志,仅提供插入和查询操作。非常高效,无阻塞的插入和查询。
Memory:内存型,数据存储于内存中,存储引擎。缓存型存储引擎。
常用的两种引擎 innodb 和myisam
类型的选择
尽可能的小(占用储存空间少)
tinyint,smallint, mediumint, int , bigint, varchar(n), varchar(m), datetime, timestamp.
尽可能的定长(占用存储空间固定)
char, varchar, decimal(变长), double(float)(定长)。
尽可能使用整数
ipv4, int , unsigned, varchar(15), enum
范式,逆范式
例如在写好的规范式电商项目里。 商品表里已经有了商品的数量。而我们需要频繁的用到商品数量。 这个时候我们可以在需要的表里面增加商品数量的字段。当我们在次需要商品数量的时候。可以不用到联查。 这个就叫做逆范式。
提示。 这是一种优化的。 方案。 除非你对项目特别的熟悉 。不然的话请慎用 。 维护起来会有一定的麻烦。
索引的使用
explain执行计划:可以在通过select语句前,使用explain。来获取该查询语句的执行计划。
4种索引:主键索引,普通索引,唯一索引,全文索引。
约束不是索引。 约束(一种限制,约束)依赖于索引(关键字。匹配)
什么场景使用呢?
1.索引检索,用于条件过滤
2.索引排序,用于orde bay排序
3.索引覆盖,在已查询出来的基础上继续查询拼接覆盖