更新次数 | 更新时间 |
---|---|
首发 | 2021.10.25 |
第一次更新 | 2021.10.26 1.删除了书中大量不必要的存储引擎类型 2.摘要完毕Mysql架构与历史部分 |
第二次更新 | 2021.10.29 1.摘要基准测试内容 2.删除了大量对概念的举例. |
第三次更新 | 2021.11.4 1.简化服务器性能剖析 |
第四次更新 | 2021.11.18 摘要完毕Schema与数据类型优化 |
第五次更新 | 2022.8.30 索引篇以及性能优化高级篇部分 |
第六次更新 | 2022.8.31 索引篇以及性能优化高级篇部分内容优化 |
第七次更新 | 2022.9.2 性能优化高级篇新增order by之后语句优化 |
第八次更新 | 2022.9.4 1.锁机制更新 2.对引用的’尚硅谷MySQL数据库高级’原理内容研判 3.更新事务内容 4. 重构锁内容 |
第九次更新 | 2022.11.16 1.更新为什么mysql选择b+树 2.b+树数据结构内容优化 |
第十次更新 | 2022.11.18 1.索引底层原理:如为什么要遵循最左前缀原则 |
第十一次更新 | 2022.11.22 1.发现网上大量其他变种b+树拿来讲mysql底层. 强调mysql的b+树叶子节点之间是双向循环链表 |
第十二次更新 | 2023.1.24 1.补充b+树3-4层的数据量 2.mysql8.0新特性跳跃扫描对最左前缀查询的影响 |
第十三次更新 | 2023.5.30 1 !=和<>到底走不走索引? 2.!=和<>对主键有没有影响? |
第十四次更新 | 2023.5.31 sql分析工具optimizer trace |
第十五次更新 | 2023.7.20 不连续模糊查询怎么解决 |
第十六次更新 | 2023.10.27 激进定义分步查询比关联查询优秀 |
第十七次更新 | 2024.2.29 更新了redo日志讲解 |
文章目录
- 前言
- 一、java开发之路的基石mysql组件的架构简介
- 1.1.1 Mysql的逻辑架构
- 1.1.2 连接管理与安全
- 1.1.3 优化与执行
- 1.2 锁的并发控制
- 1.2.1 锁粒度
- 1.2.2 怎么解决`脏读、不可重复读、幻读`这些问题呢?其实有两种可选的解决方案:
- 1.2.3从数据操作的类型划分: 读写锁
- 1.2.4从锁的粒度划分: 表级锁,行级锁,页锁
- 1.2.4.1表锁 (不依赖存储引擎)
- 1.2.4.2表级别的读写锁:
- 1.2.4.3 意向锁
- 1.2.4.4 自增锁
- 1.2.4.5 元数据锁
- 1.2.5 行锁
- 1.2.5.1 记录锁
- 1.2.5.2 间隙锁
- 1.2.5.3 临键锁
- 1.2.5.4 插入意向锁
- 1.2.6 页锁
- 1.3 事务(熟悉ACID可跳过)
- 1.3.1 隔离级别
- 1.3.2 死锁
- 1.3.3 事务日志
- 1.3.3.1 为啥需要redo日志
- 1.3.3.2 redo log刷盘策略:
- 1.3.3.3 redo log写入策略:
- 1.3.3.4 undo日志
- 1.3.4 mysql中的事务
- 设置提交模式和隔离级别
- 在事务中混合使用存储引擎
- 隐式和显式锁定
- 1.4多版本并发控制
- 1.5 MySQL的存储引擎
- ✔1.5.1 InnoDB引擎
- InnoDB概览
- MyISAM存储引擎
- MyISAM特性
- MyISAM压缩表
- MyISAM性能
- 1.5.3Mysql内建的其他主要存储引擎简要介绍
- Archive引擎
- CSV引擎
- Memory引擎
- NDB集群引擎
- 1.5.4 第三方存储引擎
- OLTP类引擎
- 面向列的存储引擎
- 1.5.5 选择合适的引擎
- 1.5.6 转换表的引擎
- 1.6 Mysql架构部分总结
- 第二章.MySQL基准测试
- 2.1 为什么需要基准测试?
- 2.2 基准测试的策略
- 2.2.1 测试何种指标
- 2.3 基准测试方法
- 常见的错误
- 2.3.1 设计和规划基准测试
- 2.3.2 基准测试应该运行多长时间
- 2.3.3 获取系统性能和状态
- 2.3.4 获得准确的测试结果
- 2.3.5 运行基准测试并分析结果
- 2.3.6 绘图的重要性
- 2.4 基准测试工具
- 2.5 基准测试案例
- 2.6 总结
- 服务器性能剖析
- 3.1 性能优化简介
- 3.1.1通过性能剖析进行优化
- 3.1.2 理解性能剖析
- 3.2 对应用程序进行性能剖析
- MySQL企业监控器的查询分析功能
- 3.3剖析MySQL查询
- 3.3.1剖析服务器负载
- 3.4诊断间歇性问题
- 3.4.1捕获诊断数据
- 3.5 其他剖析工具
- 3.6总结
- 第四章 Schema与数据类型优化
- 4.1 选择优化的数据类型
- 4.1.1 整数类型
- 4.1.2 实数类型
- 4.1.3 字符串类型
- VARCHAR
- CHAR
- 4.1.4日期和时间类型
- DATETIME
- TIMESTAMP
- 4.2加快ALTER TABLE操作的速度
- 4.2.1只修改.frm文件
- 4.3 总结
- 五.创建高性能索引
- 5.1 基本定义
- 5.2 b+tree的数据结构
- 为啥b+树大概3到4层?
- 5. 2.0 为什么要选择b+树?
- 5.2.0.1 二叉搜索树
- 5.2.0.2 AVL(二叉平衡树)
- 5.2.0.3 红黑树(也称为平衡二叉树)
- 5.2.1 重要! b+tree索引生效的条件
- 5.2.1.1 为什么要遵循最左前缀原则?
- 5.2.2 下面是一些关于B+Tree索引的限制
- 5.2.3 深度分析!=和<>
- 5.3 哈希索引
- 5.4 空间数据索引(R+Tree)
- 5.5 全文索引
- 5.6 聚簇(聚集)索引
- 5.6.1为什么InnoDB表必须建主键,并且推荐使用整型的自增主键?
- 5.7哪些情况需要建立索引
- 5.8哪些情况不要建索引
- 5.9 索引的优劣
- 5.10 采用逻辑删除的原因
- 六. mysql高级实践技能
- 6.1 sql性能下降的原因
- 6.2 查询性能优化
- 6.2.1常见瓶颈
- 6.2.2 explain
- 6.3 索引优化
- 6.3.1 小表驱动大表(join)
- 6.3.2 避免索引失效
- 6.3.3 其他问题
- 6.3.3.1.什么是回表
- 6.3.3.2.解决like%字符串%时索引不被使用的方法?
- 6.3.3.3.覆盖索引为什么可以不遵循最左前缀查询?
- 6.3.3.4 注意: and表是并列关系.只要and中有最左前缀索引(带头大哥).那么无论顺序如何.都会被mysql查询优化器优化,变成正常的索引序列.但范围之后依然全失效
- 6.3.3.5 mysq表关联底层机制
- 6.4 count()函数
- 6.5 查询优化
- 6.5.1 小表驱动大表
- 6.5.2 order by排序优化
- 6.5.3 group by排序
- 6.6 慢查询日志
- 6.7 show profile
- 6.8 全局查询日志
- 6.7 optimizer trace分析工具
- 七.其他问题
- 7.1 不连续模糊查询
- 7.2 建议分步查询