一、MySQL 架构
C/S 架构,即客户端/服务器架构。服务器程序直接和我们存储的数据打交道,多个客户端连接这个服务器程序。客户端发送请求,服务器响应请求。
MySQL 数据库实例 :即 MySQL 服务器的进程 (我们使用任务管理器查看,可以看到的 mysqld 就是 MySQL 服务器的进程 )
1.1 MySQL 客户端和服务器通信方式 :
1. TCP / IP
因为实际生产环境下,服务器和客户端可能运行在不同的主机中,于是需要通过网络来通信。MySQL 使用 TCP 作为通信协议。
每个计算机有个唯一的 IP 地址,MySQL 服务器再想操作系统申请一个 端口号 (默认为 3306),就可以进行网络通信了。
可以联想到我们使用 SpringBoot 时,配置 yml 文件填写 MySQL 服务器地址 (即 TCP/IP通信的实例)
2. 命名管道和共享内存
服务器和客户端在同一个 Windows 主机上
3. Unix 域套接字文件
客户端和服务器连接相同的 UNIX 套接字文件 ( /tmp/mysql.sock )
1.2 MySQL 服务器如何处理客户端请求
连接管理 —— 解析与优化 —— 存储引擎
- 连接管理
客户端进程通过 1.1 节介绍的三种连接方式与服务器建立连接,客户端创建一个连接,服务器创建一个线程专门处理这个连接。
如何避免频繁创建消耗线程:
客户端断开连接时,服务器缓存下与之建立连接的这个线程。新的客户端进行连接时,把这个线程分配给它。
- 解析与优化
(1)查询缓存
缓存不命中原因:
- 查询请求在任意字符上的不同
- 查询请求包含系统函数、用户自定义变量和函数、一些系统表 (这种情况不会被缓存)
缓存失效:
MySQL 检测表的变化,有变化,删缓存
(2) 语法解析
解析客户端发过来的文本
(3)查询优化
MySQL 优化程序对自动进行优化(外连接转内连接、表达式简化
子程序转连接等),提高效率
- 存储引擎
存储引擎是 MySQL 服务器对数据存储和提取操作的封装 ,不同的存储引擎具有不同的存储结构和存取算法
MySQL Server 完成了查询优化后,按照生成的执行计划调用底层存储引擎提供的 API, 再把获取到的数据返回给服务端
存储引擎相关操作:
SHOW ENGINES;
CREATE TABLE 表名(
建表语句;
) ENGINE = 存储引擎名称;
ALTER TABLE 表名 ENGINE = 存储引擎名称;