mysql 原理
事务 ACID 如何实现
redo log 重做日志其实保障的是事务的持久性和一致性,而 undo log 撤销日志则保障了事务的原子性,锁保证隔离性。
一个事务写操作对另一个事务写操作的影响:锁机制保证隔离性
一个事务写操作对另一个事务读操作的影响:MVCC 保证隔离性
- 原子性:使用 undo log ,从而达到回滚
 - 持久性:使用 redo log,从而达到故障后恢复
 - 隔离性:使用锁以及 MVCC,运用的优化思想有读写分离,读读并行,读写并行
 - 一致性:通过回滚,以及恢复,和在并发环境下的隔离做到一致性。
 
索引如何存储
B+树,每一个节点为一页,IO 次数约等于树高度
mysql 笔记
- uid 使用 bigint 长度 20 和 primary key 和 auto_increment
 - create_time 使用 timestamp 默认值 CURRENT_TIMESTAMP
 - update_time 使用 timestamp 默认值 CURRENT_TIMESTAMP 加 on_update
 - 一般用 varchar 长度 64,128,512 最大 65535
 - 超大用 text
 
总结点
mysql
- 索引
- B+树
 - 查找页+二分查找
 
 - 锁
- 分类:SX 读写锁
 - 算法
- record lock 记录锁
 - gap lock 间隙锁
 - next-key lock 记录间隙锁
 
 
 - 事务
- A 原子性
- redo、undo
 
 - C 一致性
- redo、undo、记录间隙锁+MVCC
 
 - I 隔离性
- 记录间隙锁+MVCC
 
 - D 持久性
- redo、undo
 
 
 - A 原子性
 - 隔离级别
- 未提交读
 - 提交读
 - 重复读
- 解决重复数据读取不一致
 
 - 串行化
- 解决幻读(两次读 出现数据增多 insert 进来的数据)
 
 
 - 性能调优
- 表结构优化
 - 索引优化
 - 查询语句优化
 - 配置文件优化
 - 机器优化
 
 
其他
查询数据库磁盘占用
1  | select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2),' MB') as data_size,  | 
查询某个数据库每个表磁盘占用
1  | select TABLE_NAME, concat(truncate(data_length/1024/1024,2),' MB') as data_size,  |