Mysql体系架构,存储引擎,索引结构
MySQL体系架构

网络接入层:通过一些数据库操作语言与mysql服务器建立连接,这里将其称之为网络接入层
服务层:
- 系统管理工具(备份与恢复,安全,复制等)
- 连接池(连接管理,授权认证,安全防护,并会存储一些连接缓存)
- sql接口(mysql是DBMS(数据库管理系统)接收sql命令)
- parser解析器(mysql是DBMS(数据库管理系统),无法直接理解sql语句,所以需要解析器来告诉mysql怎么做)
- 查询优化器(通过:“选取-投影-联结”操作优化查询路径)
- 缓存(查询缓存,由一系列小缓存(表,列,key)组成,版本8之前有)
存储引擎层:提供不同的存储引擎,不同引擎具有不同的优势,例如innoDB,Mylsam,Memory等,主要与文件存储层交互
文件系统层:该层主要是将数据库的数据存储在文件系统之上,并完成与存储引擎的交互。
一条sql语句在mysql中的运行过程


存储引擎
innoDB:多应用于高并发场景,在应对高并发场景的性能较优秀,对于频繁插入删除,数据修改比较频繁的场景更为适用,使用B+树索引
Mylsam:不支持事务,所以在并发场景下的表现不好,但是访问速度快,应用在只读场景下比较好,例如历史记录,使用B+树索引
Memory:他的表数据存储在内存中,使用完表之后就直接删除,所以多用为中间表,使用hash索引
索引结构
为甚B+树比B树更适合做索引


1.B+ 树的磁盘读写代价更低
B+ 树的数据都集中在叶子节点,分支节点 只负责指针(索引);B 树的分支节点既有指针也有数据 。这将导致B+ 树的层高会小于B 树的层高,也就是说B+ 树平均的Io次数会小于B 树。
2.B+ 树的查询效率更加稳定
B+ 树的数据都存放在叶子节点,故任何关键字的查找必须走一条从根节点到叶子节点的路径。所有关键字的查询路径相同,每个数据查询效率相当。
3.B+树更便于遍历
由于B+树的数据都存储在叶子结点中,分支结点均为索引,遍历只需要扫描一遍叶子节点即可;B树因为其分支结点同样存储着数据,要找到具体的数据,需要进行一次中序遍历按序来搜索。
4.B+树更擅长范围查询
B+树叶子节点存放数据,数据是按顺序放置的双向链表。B树范围查询只能中序遍历。
5.B+ 树占用内存空间小
B+ 树索引节点没有数据,比较小。在内存有限的情况下,相比于B树索引可以加载更多B+ 树索引。
innoDB的索引有聚簇索引(主键索引)和非聚簇索引,聚簇索引只能有一个,非聚簇索引没有限制
B+树 叶子节点包含数据表中行记录就是聚簇索引(索引和数据是一块的),只包含key就是非聚簇索引
Mylsam的索引都是非聚簇索引,因为Mylsam的存储结构是索引和表数据是分开的两个文件,所以索引的data部分只是索引的地址值
