这是我参与「第五届青训营 」伴学笔记创作活动的第 17 天
主要内容:关系型数据库 经典案例、发展历史、关键技术、企业实战。
RDBMS:
事务的四大特性:acid 原子性:事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生。
一致性:数据库事务不能破坏关系数据库的完整性以及业务逻辑上的一致性。
隔离性:多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其他事务的运行效果。
持久性:在事务完成以后,该事务对数据库的所作操作便持久的保存在数据库之中,不会被回滚。
高并发、高可靠
网状模型:网状数据库所基于的网状数据模型建立的数据之间的联系,能反映显示生活中信息的关联,是许多扩建对象的自然表达方式。
SQL优化 1、插入优化
- 批量插入:通过一条sql插入多条数据
- 手动提交事务:
start transaction;
insert into ...
insert into ...
insert into ...
commit;
- 主键顺序插入:主键按照顺序依次插入,效率好于乱序插入
- 大批量插入数据:不使用insert,使用MySQL提供的load指令。
2、主键优化
- 页分裂:分裂是数据时顺序排列的,在中间插入,页空间不够,需要进行分裂。
- 页合并:如果一个页的数据被删的少于50%(可以进行设置),会看看能不能和周围的页进行合并。
主键设计原则:
- 尽量降低主键的长度
- 插入数据时顺序插入,不然容易出现页分裂,降低效率。选择使用auto_increment自增主键
- 尽量不要使用UUID做主键或者是其他自然主键,如身份证号。
- 业务操作时,避免对主键的修改。
3、order by 优化
有两种排序性能,
using index:通过有序索引顺序扫描直接返回有序数据,不需要额外排序,操作效率高,因为这种相当于直接利用了索引自身的排序,不用重新排序。
using filesort:通过表的索引或全表扫描,读取满足条件的数据行,然后再排序缓冲区sort buffer中完成排序操作,所有不是通过索引直接返回排序结果的排序都叫filesort排序。
- 根据排序字段建立合适的索引,多字段排序时,遵循最左前缀法则。这里的最左和查询的最左不一样,查询的最左可以由系统调整位置,位置没有关系,但是这里的最左顺序有用户确定,如果顺序不对则会出现using filesort
- 尽量使用覆盖索引
- 多字段排序,一个升序一个降序,此时需要注意联合索引在创建时的规则(asc、desc)
- 如果不可避免的出现filesort,大数据量排序时,可以适当增大排序缓冲区大小sort_buffer_size(默认256K)
4、group by 优化
- 在分组操作时,可以通过索引来提高效率
- 分组 操作时,索引的使用也是满足最左前缀法则的。这个最左前缀法则去想B+树的数据结构。
5、limit优化
覆盖索引+子查询来优化
6、count优化
7、update优化
InnoDB的行锁是针对索引家的锁,不是针对记录加的锁,并且该索引不能失效,否则会从行锁升级为表锁。
也就是说如果字段没有添加索引,修改的时候是表锁。主键是行锁。因为主键自动添加了索引。