发表于: 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


返回列表 返回列表
评论

    分享到