Mysql知识点总结
全盘了解Mysql
mysql体系结构
1 | 建立连接 查询缓存 解析器 优化器 执行引擎 |
mysql逻辑架构
1 | 连接层 服务层 存储引擎层 文件系统 |
mysql中的目录和文件详解
1 | bin 目录: 放置可执行文件 |
mysql中的系统库
数据库事务相关
事务特性
1 | ACID 原子性 一致性 持久性 隔离性 |
事务并发会带来的问题
隔离级别
1 | 读未提交 可能出现脏读 |
Mysql中表设计和数据类型优化
数据库三范式
反范式设计
字段数据类型优化
1 | 1, 在满足业务的情况下,更小的就更好 |
数据库命名规范
高性能索引
索引入门
索引的基本概念
1 | 索引的本质:是一种数据结构 |
hash 是否适合
1 | 不适合 不适合范围查询 自适应hash索引 |
innodb引擎支持的索引类型
1 | B+数 hash 全文索引 |
B+数
演变和数据结构本身
1 | 减少IO 16k 矮胖 巡道 旋转 |
为什么B+数最合适
1 | 减少IO 16k 矮胖 |
磁盘和B+数
1 | 巡道 旋转 |
索引辨析
聚簇索引
1 | innodb 的主键索引 存放了表的全部数据 |
辅助索引
1 | 存放构成索引的列 以及主键id 可能需要回表 |
覆盖索引
1 | 搜索的字段在索引中能查出来 |
联合索引
1 | 多个列构成的索引 最左前缀原则 |
倒排索引
自适应hash索引
1 | innodb内部使用 热点数据缓存 |
深入思考索引在查询中的使用
1 | 一个索引就是一个B+数 一个查询只能使用一个索引 索引是为了加速查询 |
高性能的索引 创建策略
1 | 离散性高 |
三星索引
Mysql性能优化
调优金字塔
1 | 架构调优 sql级别调优 操作系统 |
慢查询日志
1 | 重构查询 切分查询 |
Explain 执行计划
1 | sqltype type(访问类型 system const ref range all) extra(useing temp useing index ) |
MRR
1 | 批量回表 读取部分二级索引中的id 排序 统一进行回表 |
ICP
1 | 索引条件下推 先过滤再回表 |
高性能的索引 使用策略
1 | 索引不要做操作 |
分区表
1 | 横向切分 |
mysql 的底层执行原理
索引合并
1 | 某些情况下会使用多个索引 |
连接查询
连接过程
连接的执行
1 | 嵌套循环连接 |
mysql的查询成本计算
1 | 可以解释为啥sql没有走索引 |
innodb中的统计数据
mysql查询重写规则
innodb 引擎底层原理
innodb记录存储结构
1 | 可变长度字段长度 null值列记录 头信息 rowID tx_id roll_tx 数据列值 |
innodb数据页结构
innodb表空间
1 | 系统表空间 |
双写
1 | 三大特性之一 |
innodb中的buffer pool
LRU链表的管理
1 | 空闲列表 |
事务的原理
redo日志
1 | 保证持久性 |
undo日志
1 | 保证原子性 |
MVCC
1 | 多版本并发控制 |
mysql中的锁
行级锁
1 | 间隙锁 二级索引上 |