MySQL逻辑架构、执行流程以及存储引擎

一、MySQL的逻辑架构

    MySQL的整体逻辑架构如下所示

下面对各个模块进行介绍:

1.连接器(connectors)

    一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限,根据不同语言与SQL的交互。

2.系统管理和控制工具(management services & utilities)

3.连接池(connection pool)

    管理缓冲用户连接,线程处理等需要缓存的需求。

    负责监听对 MySQL Server 的各种请求,接收连接请求,转发所有连接请求到线程管理模块。每一个连接上 MySQL Server 的客户端请求都会被分配(或创建)一个连接线程为其单独服务。

    连接线程的主要工作就是负责 MySQL Server 与客户端的通信,接受客户端的命令请求,传递 Server 端的结果信息等。线程管理模块则负责管理维护这些连接线程。包括线程的创建,线程的 cache 等。

4.SQL接口(SQL interface)

    接受用户的SQL命令,并且返回用户需要查询的结果。

5.解析器(parser)

    SQL命令传递到解析器的时候会被解析器验证和解析。

  • 将SQL语句进行语义和语法的分析,分解成数据结构,然后按照不同的操作类型进行分类,然后做出针对性的转发到后续步骤,以后SQL语句的传递和处理就是基于这个结构的。
  • 如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的

6.查询优化器(optimizer)

     SQL语句在查询之前会使用查询优化器对查询进行优化

    查询优化器使用的策略是“选取-投影-联接”

例如:select id,name from user where age = 18;

  • 该条查询语言先根据where语句进行选取,并不是将所有的数据查询出来再进行过滤;
  • 再根据 id,name 进行属性投影,并不是将所有的属性全部提取出来之后进行过滤;
  • 最后将两个查询条件联接起来生成最终的查询结果。

7.查询缓存(cache 和 buffer)

    主要功能是将客户端提交给MySQL的 select请求的返回结果集 cache 到内存中,与该 query 的一个 hash 值 做一个对应。该 Query 所取数据的基表发生任何数据的变化之后, MySQL 会自动使该 query 的Cache 失效。在读写比例非常高的应用系统中, Query Cache 对性能的提高是非常显著的,当然它对内存的消耗也是非常大的。

    如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等。

8.存储引擎(pluggable storage engines)

    存储引擎接口模块可以说是 MySQL 数据库中最有特色的一点了。目前各种数据库产品中,基本上只有 MySQL 可以实现其底层数据存储引擎的插件式管理。这个模块实际上只是 一个抽象类,但正是因为它成功地将各种数据处理高度抽象化,才成就了今天 MySQL 可插拔存储引擎的特色。

注意:存储引擎是基于表,而不是数据库。

二、MySQL的简单执行流程

三、存储引擎

MyISAM

高速引擎,拥有较高的插入,查询速度,但不支持事务、不支持行锁、不支持外键、支持3种不同的存储格式。包含静态型、动态型和压缩型

InnoDB

5.5之后MySQL的默认数据库引擎,支持事务和行级锁,事务处理、回滚、崩溃修复能力和多版本并发控制的事务安全,比MyISAM处理速度稍慢,支持外键。

ISAM

MyISAM的前身,5.0以后不再默认安装

MRG MyISAM(MERGE)

将多个表联合成一个表使用,在超大规模数据存储时很有用。

Memory

内存存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。在内存上保存数据,意味着数据很有可能会丢失。

Falcon

一种新的存储引擎,支持事务处理,有可能是innoDB的替代者

Archive

将数据压缩后存储,非常适合存储大量的、独立的,作为历史记录的数据,但是只能进行插入和查询

CSV

CSV存储引擎是基于CSV格式文件存储数据(应用于跨平台的数据交换)

多存储引擎是MySQL区别于其他数据库的一大特性,存储引擎是针对表的;

MySQL5.5之后,默认的存储引擎有MyISAM 变成了 InnoDB。

开发中最多使用的就是InnoDB 和 MyISAM,下面对于这两种引擎进行介绍:

  InnoDB MyISAM
存储文件

.frm 表定义文件

.ibd 数据文件

.frm 表定义文件

.myd 数据文件

.myi 索引文件

表锁、行锁 表锁
事务 acid 不支持
crud 读和写多 读多
count 扫表 有专门存储的地方
索引结构 B + tree B+tree

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章