2024-10-06
--------------------------------------------------------------------------------------------------------------------------------
1.一条SQL语句是如何执行的
单进程的多线程模型
MySQL的物理目录
show global variables like "%basedir%";
InnoDB是如何存储表数据的
- InnoDB其实是使用页为基本单位来管理存储空间的,默认的页大小为16KB。
- 对于InnoDB存储引擎来说,每个索引都对应着一棵B+树,该B+树的每个节点都是一个数据页,数据页之间不必要是物理连续的,因为数据页之间有双向链表来维护着这些页的顺序
- InnoDB的聚簇索引的叶子节点存储了完整的用户记录,也就是所谓的索引即数据,数据即索引
系统表空间(system tablespace)
系统表空间可以对应文件系统上一个或多个实际的文件,默认,InnoDB会在数据目录下创建一个名为ibdata
独立表空间(file-per-table tablespace)
在MySQL5.6.6以及之后的版本中,InnoDB默认为每一个表建立一个独立表空间,根据参数innodb_file_per_table控制
客户端与服务端的交互
数据库的核心在于存储引擎
MySQl逻辑架构
向MySQl发送一个请求---连接器
客户端如果长时间没有动静,连接器会将其断开,由wait_timeout控制,默认是8
长期使用长连接会导致内存飙升
向MySQl发送一个请求---查询缓存
将缓存放入一个引用表之中,通过哈希值进行引用
查询缓存时按需使用的,参数querycache type设置成DEMAND(默认不使用查询缓存)
虽然查询缓存有时可以提千系统性能,但也不得不因维护这块缓存而造成一些开销,比如每次都要去查询缓存中检索,查询请求处理完需要更新查询缓存,维护该查询缓存对应的内存区域。从MySQL 5.7.20开始,不推荐使用查询缓存,并在MySQL8.0中删除。
向MySQl发送一个请求---分析器
向MySQl发送一个请求---优化器
基于成本的查询优化器(Cost-Based Optimizer),IO和CPU
向MySQl发送一个请求---执行引擎
三个阶段的权限判断
各种不同的存储引擎向上边的MySQL服务器层提供统一的调用接口(也就是存储引擎API)包含了几十个底层函数,像"读取索引第一条内容"、"读取索引下一条内容"、"插入记录"等等。
存储引擎
从 MySQL5.5之后,默认的存储引擎是 InnoDB。InnoDB 是一个通用的存储引擎,除非有特殊需求,推荐使用InnoDB.
SHOW ENGINES;