发表于: 2020-01-02 18:59:35
1 974
一、今天完成的事
mysql优化
1.存储引擎
myisam:
myisam适用于经常查询的表格
不支持事务,支持表锁,查询效率快,
innodb:
独立表空间:每个表都会生成以独立的文件方式来存储
.frm描述文件
.ibd包括单独一个表的数据及索引内容
支持行级锁,支持事务
.frm结构
.MYD数据
.MYI索引
插入速度快,空间占用量小
支持全文索引,支持hash索引,b+tree索引
2.字段类型选择
字段类型应该满足需求,尽量满足以下需求:
尽可能小(占用存储空间小),尽可能定长(占用存储空间固定)、尽可能使用整数
3.范式与逆范式
第一范式:原子性,尽可能拆分字段
第二范式:主键列与非主键列遵循完全函数依赖关系
第三范式:非主键列之间没有传递函数依赖关系索引
逆范式:不遵循范式规则,提高数据库性能
4.索引
主键索引:关键字不能重复,不能为null,同时增加主键约束
唯一索引:关键字不能重复,同时增加唯一约束
普通索引:对关键字没有要求
全文索引:关键字的来源不是所有字段的数据,而是从字段中提取的特别关键词
不可过度使用索引。索引越多,占用空间越大,反而性能变慢
只对where子句中频繁使用的建立索引。
尽可能使用唯一索引,重复值越少,索引效果越强
使用短索引,如果char(255)太大,应该给它指定一个前缀长度,大部分情况下前十位至二十位是一样的,或者不要加索引
充分利用左前缀
建索引时检查是否满足使用原则
5.增加缓存
开启mysql提供的缓存区
动态查询不能被缓存
6.分区分表
联合查询或数据表比较大的时候需要分区,减少数据库负担,提高数据库的效率。
其他
1.对于并发性的SQL
少用(不用)多表操作(子查询,联合查询),而是将复杂的SQL拆分多次执行。如果查询很原子(很小),会增加查询缓存的利用率。
2.大量数据的插入
多条 insert或者Load data into table(从文件里载入数据到表里)
建议,先关闭约束及索引,完成数据插入,再重新生成索引及约束。
3.分页
4.随机选一些数据,不要使用Order by Rand()
二、遇到的问题
三、收获
四、明天的计划
学习dal
评论