导图社区 MySQL复习
MySQL复习知识思维导图,包括:架构、执行流程、索引、结构、内部、索引、存储、引擎日志。
社区模板帮助中心,点此进入>>
关注公众号获取MySQL
MySQL
架构
Service
连接器
分析器
优化器
执行器
存储引擎层
执行流程
查询流程
修改流程
扩展一下两阶段提交
索引结构
哈希
把每个数据都hash出一串key之后,然后存在数据页的某一个位置
链表
物理存储单元上非连续、非顺序的存储结构
二叉树
红黑树
红黑树是一种 特定类型的二叉树,是一种平衡二叉查找树的变体
B+树
内部索引
聚簇索引
可能面临“页分裂”的问题。当行的主键值要求必须将这一行插入到某个已满的页中时,存储引擎会将该页分裂成两个页面来容纳该行,这就是一次分裂操作。页分裂会导致表占用更多的磁盘空间。
非聚簇索引(二级索引)
存储的不是数据,而是数据行的地址
如果主键比较大的话,那非聚簇索引将会变得更大,因为非聚簇索引的叶子节点存储的是主键值,过长的主键值,会导致非叶子节点占用更多的物理空间
普通索引
加快对数据的访问速度。
唯一索引
与普通索引类型,不同的是唯一索引的列值必须唯一。但允许为空值。主键索引是特殊的唯一索引,不允许有空值。
联合索引
索引下推
在5.6引入。可以在索引遍历过程中,对索引中包含的字段先做判断,过滤掉不符合条件的记录,减少回表字数。
存储引擎
innodb
innodb是支持事务的存储引擎,合于插入和更新操作比较多的应用,设计合理的话是行锁(最大区别就在锁的级别上),适合大数据,大并发。
myisam
MyISAM 是非事务的存储引擎,适合用于频繁查询的应用。表锁,不会出现死锁,适合小数据,小并发
日志
redo log
重做日志
redo log buffer日志缓存(物理上这是MySQL的进程内存)
redo log file日志文件
写入机制
事务未提交之前,会先写入redo log buffer,等commit之后,再刷到redo log
写入策略
参数(innodb_flush_log_at_trx_commit)
0,表示每次事务提交时都只是把 redo log 留在 redo log buffer 中 ;
1,表示每次事务提交时都将 redo log 直接持久化到磁盘;