作者:公众号【z小赵】
★
一枚用心坚持写原创的“无趣”程序猿,在自身受益的同时也让朋友们在技术上有所提升。
为什么要学习 MySQL?
目前在使用互联网技术的公司中,几乎每家公司都会用到数据库技术来存储一些信息。目前市面上用的比较多的主流数据库有 MySQL、Oracle,以及逐渐流行起来的 PostgreSQL;下图为截止发稿前各类数据库的排名情况(数据来源于 DB-Engines 官网)
从图中可以看出,前 2 名是 Oracle 和 MySQL,可见其应用的受欢迎及广泛使用程度;由于 Oracle 和 MySQL 都是关系型数据库且 Oracle 不是免费的,本系列文章我们重点来讲解 MySQL 的相关原理实现。
本系列的侧重点是什么?
关于 SQL 基础语法不会做过多讲解,如果对 SQL 基础语法不熟悉的朋友可以在公众号后台回复 MySQL,下载《SQL 必知必会》PDF 进行自学,也可以通过 Google 方式进行自学。
本系列侧重点是 MySQL 的底层实现原理、SQL 调优、高性能的索引设计、MySQL 集群等等。
本系列文章学完之后你能得到什么?
-
了解 SQL 语句执行的底层实现原理,从而写出更加高效的 SQL
-
学会如何设计和使用索引,从而使其效果最大化
-
学会如何构建稳定的 MySQL 集群
-
应付面试及升职加薪(当然,这才是我们的最终目标)
关于 MySQL 环境及版本的选择
-
安装使用环境:MacBook Pro 10.14.6
-
MySQL 版本:5.6,选择该版本原因有二:
-
作者公司使用的是 5.6,目前库里单表存储数据量亿级别
-
网上调研各大互联网公司使用的 5.6 和 5.7 居多
基于以上两点,最终选择使用 5.6 作为本系列内容讲解的版本,当然也会介绍一些最新版本下的新特性供大家了解学习。
本系列文章大纲
-
MySQL 安装及基本架构原理介绍
-
MySQL 的并发控制和锁机制是怎么工作的
-
MySQL 索引构建原理,如果创建出高效的索引
-
SQL 执行原理及优化
-
MySQL 集群搭建及主从同步原理
-
MySQL 集群的高可用
-
实际生产环境中 MySQL 与缓存是如何配合使用的?
-
MySQL 数据备份与恢复(了解学习)
-
......
以上为本系列文章大纲,当然会随着文章的逐步讲解会根据实际情况进行相应的调整(主要是作者写文章比较随性,想到比较好的话题会随时插入到系列文章中来)。
MySQL 的安装及验证
- MySQL 下载地址(downloads.mysql.com/archives/co…
- 安装,完成后打开系统偏好设置 -> 点击 MySQL -> Start MySQL Server
- 配置环境变量
- 验证
- 查看 MySQL 版本号
- 登录 MySQL 服务端
- 查看数据库
到此,MySQL 安装完成,关于 MySQL 的语法基本使用,不熟悉的朋友请先看文章开头下载 PDF 进行学习。
MySQL 的基础架构
MySQL 整个架构图如上所示,可以分为三部分。第一部分是客户端,用于向服务端发送请求;第二部分为淡绿色框里面的内容:
-
连接及线程管理模块:用于管理客户端请求的,比如检查验证请求连接的合法性,对于合法用户分配处理线程去执行任务等等工作。验证合法性就相当于你要回家,但是门上了锁,你只有拥有正确的钥匙才能把房门打开进去,而分配处理线程去执行任务就相当于你回家了让扫地机器人帮你扫地,让电饭煲帮你煮粥,而你只是任务的分配者。
-
缓存:用于存储被频繁访问的热点数据。其作用是用户请求的数据如果在缓存中存在,则直接返回缓存中的数据,而不需要再去经过解析器、优化器等操作从存储引擎中获取,从而加快了数据的读取速度。(题外话,一般涉及到缓存时,绝大部分情况下是为了提高数据的访问速度)
-
解析器:用于解析用户提交的 SQL 语句,分析请求想要做什么样的事情。用户一般提交的请求是 CRUD,比如某个请求是个 Select,则解析器通过解析 SQL 语句,发现是一个查询请求,则接下来就会进行查询相关的操作。
-
优化器:用于优化或者重写用户的请求 SQL。优化或者重写 SQL 就是优化器觉得用户提交的 SQL 不够高效,优化器通过自己的一套逻辑处理后重写了执行相同功能的 SQL 语句,并且其执行效率比用户提交的 SQL 执行效率更高。
第三部分是存储引擎,存储引擎是用于存储数据进行 CRUD 操作后对数据处理结果进行存储的;不同的存储引擎实现的功能也不一样,比如 InnoDB 存储引擎实现了事务功能,而 MYISAM 存储引擎并没有事务的功能,再比如 InnoBD 存储引擎对于并发操作实现了行级锁,而 MYISAM 存储引擎是表锁。常见的存储引擎有如下:InnoDB、MYISAM、NDB、Memory 等等,文章以 InnoDB 存储引擎贯穿整个系列,因为 InnoDB 在生产环境中也是使用最多的存储引擎。存储引擎究竟实现了哪些功能呢?这里以 InnoDB 为例:
-
支持事务。对于日常开发需求中,有些应用场景需要联动多个资源同时处理,要么多个资源同时处理成功,要么只要有一个失败则全体进行回滚操作,即是通过事务的方式将多个处理动作做成一个原子性操作。
-
MVCC 机制。InnoDB采用了行级锁,但是为了进一步降低锁资源的竞争程度,采用 MVCC 机制实现更高效的并发操作。
-
索引机制。不同引擎实现的索引机制各不相同,InnoDB 引擎通过对主键建立索引或者主键结合其他列建立二级索引,加速数据的读取速度。
-
可预测性预读策略。InnoDB 通过可预测性预读策略对磁盘中的数据进行读取,然后在内存中建立 hash 索引,从而进一步提升读取数据的速度。
以上为 InnoDB 引擎的部分常见的特性,通过简单了解之后能够对第三层的引擎能够先有个直观的认识。
总结
本文主要介绍了为什么要学习 MySQL,MySQL 的安装及基本架构组成部分的功能介绍,下篇文章我们来深入了解一下 MySQL 的并发控制和锁机制,敬请期待。
往期精选
Redis系列(七):缓存只是读写回种这么简单吗?如果是,那么请你一定看看这篇文章!
Kafka系列10:面试题是否有必要深入了解其背后的原理?我觉得应该刨根究底(下)