本文是对于MySQL技术内幕 InnoDB存储引擎 (第2版)的笔记和提纲整理
主要用于复习和知识点快速复习
第二章:Innodb存储引擎
笔记:https://blog.csdn.net/qq_41157876/article/details/109173407
2.1 Innodb的后台线程
- Master Thread *1 (重做日志缓冲 + 合并插入缓冲)
- IO Thread *4+4
- Purge Thread(资源清理) *1
- Page Cleaner Thread(刷新脏页) *1
2.2 内存
- 缓冲池
- 重做日志缓冲
- 额外的内存池
2.3 Checkpoint技术
2.4 innodb特性
- 插入缓冲
- 二次写
- 自适应哈希
- 刷新邻接页
第三章:文件
笔记:https://blog.csdn.net/qq_41157876/article/details/109173663
Ref:事务日志:https://www.cnblogs.com/f-ck-need-u/p/9010872.html
3.1 参数配置文件(my.conf)
3.2 日志文件
- 错误日志(error log)
- 查询日志 (log)
- 慢查询日志 (slow query log)
- 事务日志 (redo log + undo log)
- redo log
- 三种redo_buffer到os_buffer到磁盘的写入规则
- 基本单位:redo log block
- log group和redo log file
- undo log
- 二进制日志 (binlog)
- 中继日志
3.3 套接字文件
3.4 pid文件
3.5 表结构frm文件
3.6 innodb和myisam文件
第四章:表
笔记:https://blog.csdn.net/qq_41157876/article/details/109183340
4.1 Innodb存储结构
- 段
- 区
- 页/块
- 行
4.2 视图
4.3 分区表
第五章:索引与算法
笔记:https://blog.csdn.net/qq_41157876/article/details/109187544
5.1 索引分类
- 数据结构角度
- 全文索引
- 哈希索引
- B树索引
- 聚集索引
- 非聚集索引(辅助索引)
- MRR优化
- ICP优化
- 逻辑角度
- 主键索引
- 唯一索引
- 普通索引
5.2 Cardinality值
第六章:锁
笔记:https://blog.csdn.net/qq_41157876/article/details/109256584
Ref:https://www.cnblogs.com/crazylqy/p/7611069.html
6.1 锁
- 锁的类型(从粒度分类)
- 行锁(都是悲观锁)
- 共享锁(S Lock):读锁
- 排他锁(X Lock):写锁
- 表锁:Innodb意向锁
- 意向共享锁(IS Lock):事务打算给数据行加行共享锁,事务在给一个数据行加锁前必须获得该表的IS锁
- 意向排他锁(IX Lock):事务打算给数据行加行排他锁,事务在给一个数据行加锁前必须获得该表的IX锁
- 页锁
- 锁的算法(Innodb)
- Record Lock:单个行记录上锁
- Gap Lock:间隙锁,锁范围,开区间
- Next-Key Lock:Record + Gap,锁范围,左开右闭
- 如何加锁(重点)
- 其他
- 外键和锁
- ICP问题
- 显示地关闭Gap Lock
- 查看方法
- 死锁
第七章:事务
笔记:https://blog.csdn.net/qq_41157876/article/details/109256442
7.1 事务特性:ACID
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
7.2 事务实现
- redo
- undo
- purge
- group commit
7.3 事务的隔离级别
- 丢失更新,脏读,幻读,不可重复读
- 读未提交,读已提交,可重复读,串行化
7.4 其他
- 开启事务方法
- 两阶段锁协议
- 当前读和快照读
- 一致性非锁定读和一致性锁定读
7.5 MVCC多版本并发控制
番外章:优化相关
笔记:https://blog.csdn.net/qq_41157876/article/details/115362009
11.1 常用优化手段
- show status:查看各个语句频率
- show processlist:查看低效率的语句
- explain:分析特定语句(最常用)
- show profiles:查看之前各个语句的耗时
- trace工具:查看具体sql执行语句时的优化细节
11.2 索引的使用建议
- 和底层原理有关的索引失效 / 回表问题
- 不要在索引列上进行运算操作,索引失效
- 字符串类型不加单引号,索引失效
- in走索引,not in失效
11.3 SQL语句优化
- 大批量insert
- insert语句优化
- order by语句优化
- group by语句优化
- 嵌套查询优化
- limit优化
- SQL提示(use, ignore, force index)