1.应用场景

主要用于系统学习MySQL整体架构,底层实现,学习借鉴编程思想,以及好的技术方案,

同时也是为了在实际开发中高效实践高性能 MySQL

2.学习/操作

1. 文档阅读

https://laravelacademy.org/books/high-performance-mysql   // 高性能 MySQL 实战

https://blog.csdn.net/william_n/category_7915162.html // MYSQL 专栏

2. 内容大纲

整体架构

  • 数据库安装和服务端启动原理
  • 数据库连接原理与性能优化
  • 服务端整体架构和查询语句的执行流程
  • SQL 更新语句的执行流程与日志写入
  • 当我们创建数据库和数据表时底层在做什么

索引和查询优化

  • 数据库索引底层数据结构 —— B+ 树
  • 不同类型的数据库索引 B+ 树是如何维护的
  • 花絮篇:B+ 索引树小结及数据表测试数据的快速填充
  • 全值匹配查询时索引的使用与最左前缀原则的底层原理
  • 范围匹配查询时索引的使用和 explain 结果字段解析
  • 带分页、排序和分组统计的查询如何使用索引进行优化
  • 内外连接查询的底层原理及如何使用索引进行性能优化
  • 子查询的底层执行策略及如何使用索引进行性能优化
  • 结合 PHP 业务代码高效获取数据表随机排序结果

查询小技巧分享:

对于 count 聚合查询,有同学可能会好奇到底使用 count(*) 还是 count(id) 查询性能好一些,对于 InnoDB 引擎而言,MySQL 专门对 count(*) 做了优化,而 count(id) 则会进行全表扫描,再逐行累加,因此推荐使用 count(*)

有人可能会困惑,为啥 InnoDB 不像 MyISAM 那样把全表记录数记录下来,因为 InnoDB 支持事务,而事务里面有个 MVCC 机制(下面的事务篇里面会详细介绍),每条记录可能同时存在多个版本,因此,具体有多少行是不确定的。

另外,对于经常需要计数的表字段,我们在设计数据表时会基于反范式设计通过冗余字段来存储,比如文章浏览数、视频观看数、商品购买数等,或者通过缓存系统来保存,这些手段都是为了提升查询性能。

数据库事务篇

注:以下事务篇教程仅限 InnoDB 引擎。

  • 增删改查绕不过的坎儿 —— Buffer Pool
  • MySQL 数据库事务简介与 ACID 特性
  • 通过 redo 日志保证数据库事务的持久性
  • 通过 undo 日志保证数据库事务的原子性
  • 并发事务存在的问题和 MySQL 事务隔离级别
  • 通过 MVCC 机制保证数据库事务的一致性
  • MySQL 中的全局锁、表锁和行锁(共享锁、排它锁、意向锁、死锁)
  • 悲观锁、乐观锁和数据库事务隔离性的实现

MySQL 事务如何在可重复读级别解决幻读问题:

我们知道 InnoDB 支持行锁,在更新(修改/删除)某一行之前可以先通过行锁进行加锁操作,但是对于插入操作而言,事先插入的行是不存在的,也就无法加行锁,为此 MySQL 引入了一个间隙锁(Gap Lock)的概念,即对待插入的行与行之间的间隙进行加锁(两端是(-∞,MIN) 和 (MAX,+∞)),一个相邻的间隙锁和行锁合起来形成一个 Next-key Lock,它是一个前开后闭的区间(间隙锁+行锁),Next-key Lock 是 MySQL 加锁的基本单位,并且查询过程中访问到的对象才会加锁,如果一个 SQL 加锁语句查询条件包含唯一索引(包括主键)的等值查询,则该锁退化为行锁,因此对于一个插入语句而言,由于设置了 Next-key Lock,因此可以阻塞其他事务对对应行和间隙的读操作,从而避免了幻读问题。

数据库高可用篇

  • 慢查询导致的线上数据库突发性能问题解决方案
  • 高负载导致的线上数据库突发性能问题解决方案及 PHP 数据库长连接初探
  • binlog 写入机制及高并发写入事务性能优化
  • MySQL 主从复制原理 & 基于 Docker 搭建数据库集群
  • binlog 日志查看、格式介绍与最佳选择
  • 基于 GTID 配置主从复制并在 Laravel 项目中实现数据库读写分离
  • 如何解决主从延迟问题(上)—— 主从延迟原因和优化方案
  • 如何解决主从延迟问题(下)—— 读写分离的延迟和解决方案
  • 通过主备切换保证 MySQL 数据库集群的高可用性
  • 通过 Docker 编排 Mycat 中间件实现业务的读写分离和主备热切换(基于 Laravel 项目演示)

运维小技巧分享之删库不一定要跑路篇:

binlog 日志除了用作数据库高可用集群构建之外,还可以用来恢复误删除的数据。

如果误删除的是某个数据行的话,可以使用 Flashback 工具结合日志格式为 ROW 的 binlog 来恢复对应数据;

如果误删除的是数据库/表的话,可以基于全量备份(定时备份的整个数据库数据)+增量备份(binlog)恢复对应数据;

如果误删除的是整个数据库实例的话(通过 rm 之类的磁盘文件删除命令),如果[跟前一个如果不是并列关系]已经基于 binlog 构建了数据库集群的话,这个最不用担心,只需摘除这个节点然后将其他节点数据同步过来即可。

实战优化篇(免费)

注:以下实战优化篇以 Laravel 模型类数据库操作为例进行演示

  • 测量数据库性能指标(内存使用和查询耗时)
  • 关联查询性能优化入门(索引、渴求式加载、指定查询字段)
  • 聚合查询性能优化(减少查询次数)
  • 通过子查询优化关联查询性能(通过子查询创建动态关联关系)
  • 通过函数索引和虚拟生成列优化模糊匹配查询
  • 通过子查询和联合查询结合关联查询进行模糊匹配
  • 关联查询排序实现和性能优化(上):一对一和归属关联
  • 关联查询排序实现和性能优化(下):一对多关联排序

日常数据库优化建议:

通过高级的数据库设计让 SQL 查询语句变得简单易优化,而不是堆砌复杂的难以优化的 SQL 语句才能获取到数据。

学后感受:

边学边持续更新

如果只是学习该系列文章,是没有办法学好MySQL的,

需要另外结合其他优质资料,官网文档,共同学习,思考,实践,理解

甚至要学习,结合其他计算机科目才能很好地理解一些原理,概念,

掌握MySQL。

后续补充

...

有时候读书是一种巧妙地避开思考的方法。—— 赫尔普斯

3.问题/补充

TBD

4.参考

https://laravelacademy.org/books/high-performance-mysql   // 高性能 MySQL 实战

https://blog.csdn.net/william_n/category_7915162.html // MYSQL 专栏

后续补充

...

2021-03-23 - 高性能 MySQL 实战相关推荐

  1. 高性能 MySQL实战

    概览 内容来自于周彦伟的<高性能MySQL实战>,课程有 10 个课时,本人对其内容进行了梳理.消化并形成笔记. 1. 高性能 MySQL 基础篇 1.1 体系结构 Client Conn ...

  2. 高性能MySQL实战第12讲:海量数据MySQL项目实战

    你好,我是你的数据库老师周彦伟,欢迎来到第 10 课时"MySQL 亿级数据库项目实战",这是本系列课程的最后一课时,本课时的主要内容包含 MySQL 典型数据库架构介绍.MySQ ...

  3. 2021.03.23课堂笔记

    Main package edu.xcdq; import java.util.Scanner; public class Main { public static void main(String[ ...

  4. 一份超详细的MySQL高性能优化实战总结!

    一份超详细的MySQL高性能优化实战总结! MySQL 对于很多 Linux 从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰. 在进行 MySQL 的优化之前 ...

  5. 高性能Mysql运维应用实战-高俊峰-专题视频课程

    高性能Mysql运维应用实战-8242人已学习 课程介绍         爱维Linux独家出品,本课程从mysql运维的方方面面进行介绍,主要对mysql版本的选择,mysql平台的部署,优化.调优 ...

  6. 刘子佼 mysql 下载_MySQL数据管理之备份恢复案例解析 23讲 Mysql备份恢复实战 视频教程...

    课程名称:MySQL数据管理之备份恢复案例解析 23讲 Mysql备份恢复实战课程简介: 课程独家解析MySQL 5.6最新特性,课程讲师刘子佼讲课风格幽默,善于与人沟通,善于组建和协调团队攻克技术难 ...

  7. 史上最全的 MySQL 高性能优化实战总结

    转载自   史上最全的 MySQL 高性能优化实战总结 一.前言 MySQL 对于很多 Linux 从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰.在进行 M ...

  8. MySQL持续霸榜,《高性能MySQL》第4版追新巨献!

    2022年5月,StackOverFlow社区发布开发者调查报告,全世界超过70000名开发人员参与了调研,回答了他们的技术.工具以及工作偏好. 值得关注的是,在最流行的技术调查中,专业开发者群体的倾 ...

  9. MySQL持续霸榜,《高性能MySQL》第4版,限时五折!(送书福利)

    文末送书活动 2022年5月,StackOverFlow社区发布开发者调查报告,全世界超过70000名开发人员参与了调研,回答了他们的技术.工具以及工作偏好. 值得关注的是,在最流行的技术调查中,专业 ...

  10. 留言送书丨《Oracle高性能系统实战大全》包邮到家

    墨墨导读:最近北京大学出版社出版了新书<Oracle高性能系统实战大全>,墨天轮联合北京大学出版社,赠送五本书给大家,点击本文"阅读原文"跳转墨天轮原文并留言,说出想读 ...

最新文章

  1. Docker 用法总结之:管理工具 shipyard 的具体使用指南
  2. 机器学习基础专题:高斯判别分析
  3. 第十、十一周项目四 - 教师兼干部类
  4. 24. 进程同步之Lock
  5. Java数据结构与排序算法——堆和堆排序
  6. 史上最轻量​!阿里新型单元测试Mock工具开源了
  7. 来自极客标签10款最新设计素材-系列七
  8. 信息学奥赛一本通 1040:输出绝对值 | OpenJudge NOI 1.4 02
  9. Sun HotSpot JVM内存管理及垃圾收集
  10. 前端学习笔记之页面制作(一)——PS切图
  11. 2021年的学习Flag:只争朝夕,不负韶华
  12. 如何开会——高效会议八项原则
  13. 解放生产力 - Xcode 与 Simulator 技巧整理(持续更新中)
  14. gif图像分解、gif图像制作
  15. HTTP Live Streaming 分析
  16. ubuntu快捷复制粘贴
  17. inurl+:php?id,实操:SQL注入国外xx网站
  18. Request 。。。。。 Response
  19. python 3.X 没有cPickle
  20. 2021 react学习资料

热门文章

  1. 支付宝异步通知java,支付宝异步通知接口思考与实现
  2. bibili笔试题零钱兑换
  3. 产品设计 计算机辅助设计学什么,产品设计专业计算机辅助设计课程的教学内容改革刍议...
  4. Oracle the password has expired
  5. 华为鸿蒙什么时候面市,差1元15万,华为鸿蒙全屋智能面市
  6. 有线局域网拓扑结构――混合型结构
  7. Ubuntu下安装xl2tpd服务
  8. 3年经验,如果只会自动化测试基础,可能连15K都拿不到....
  9. LeetCode291 给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
  10. java.sql.SQLException: Access denied