Mysql底层架构

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

MySQL体系架构

image

网络接入层:通过一些数据库操作语言与mysql服务器建立连接,这里将其称之为网络接入层

服务层:

  • 系统管理工具(备份与恢复,安全,复制等)
  • 连接池(连接管理,授权认证,安全防护,并会存储一些连接缓存)
  • sql接口(mysql是DBMS(数据库管理系统)接收sql命令)
  • parser解析器(mysql是DBMS(数据库管理系统),无法直接理解sql语句,所以需要解析器来告诉mysql怎么做)
  • 查询优化器(通过:“选取-投影-联结”操作优化查询路径)
  • 缓存(查询缓存,由一系列小缓存(表,列,key)组成,版本8之前有)

存储引擎层:提供不同的存储引擎,不同引擎具有不同的优势,例如innoDB,Mylsam,Memory等,主要与文件存储层交互

文件系统层:该层主要是将数据库的数据存储在文件系统之上,并完成与存储引擎的交互。


一条sql语句在mysql中的运行过程

 

image
image


存储引擎

innoDB:多应用于高并发场景,在应对高并发场景的性能较优秀,对于频繁插入删除,数据修改比较频繁的场景更为适用,使用B+树索引

Mylsam:不支持事务,所以在并发场景下的表现不好,但是访问速度快,应用在只读场景下比较好,例如历史记录,使用B+树索引

Memory:他的表数据存储在内存中,使用完表之后就直接删除,所以多用为中间表,使用hash索引


索引结构

 

image
image
为甚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部分只是索引的地址值

 

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇