徐老师的这篇文章介绍了MySQL的SQL层和存储层相关的信息,言简意赅,便于我们从宏观层面,了解一下。

原文链接参见《MySQL架构——SQL层和存储层》。

当MySQL的客户端与服务器建立连接后,MySQL将在SQL层处理每个查询。

SQL层包括解析器、授权、优化器、执行查询,及查询日志。

MySQL架构中SQL层和存储层的介绍_java

解析器:验证查询语句的语法,语义并将其转换为标准格式。

授权:验证连接的用户是否具有执行语句的权限,以及是否具有查询参照的对象权限。

优化器:为每个查询创建一个优化的执行计划,包括使用哪个索引,按照一定的顺序处理表等。

执行查询:按照查询计划执行每个查询。

查询日志:记录服务器接收或执行的查询。

SQL层按照上述顺序处理每个查询。

MySQL架构中SQL层和存储层的介绍_数据库_02

存储层

使用多种存储引擎是MySQL的一个重要的特征。MySQL的存储引擎包括InnoDB、MyISAM、NDB Cluster及Memory等引擎。

InnoDB:MySQL默认的内置引擎,该引擎支持事务处理,推荐用户使用该引擎。

MyISAM:MySQL 5.5版本之前的默认存储引擎,不支持事务处理。

NDB Cluster:NDB(Network Database)是支持内存存储的非共享引擎,支持事务处理,并能够使用外键。

除了上述引擎之外,MySQL还支持ARCHIVE、BLACKHOLE、MERGE、CSV、FEDERATED等引擎,这些引擎包含在MySQL的源代码内。

存储引擎是服务器的一个低级别的组件,用来控制不同类型的表,负责存储和检索数据。MySQL将处理每一行数据的任务委托给存储引擎,存储引擎可以将数据存储在磁盘、内存或网络上的其他组件,并能够提供索引及其他的优化。当用户创建表时,需要为其指定存储引擎用于管理数据。

存储引擎不会影响SQL层的操作,通常情况下SQL层解析SQL,存储层控制每行数据的操作。SQL语句与存储引擎相互独立,用户需要在创建表时,指定存储引擎选项,创建之后,可以使用"ALTER TABLE"语句将其转换为不同的存储引擎。SQL层需要在存储引擎的数据行操作之前执行对语句的处理,如果SQL语句不支持在某些存储引擎上操作,将会发出警告。

存储引擎提供的功能,

  • 存储媒介:磁盘、内存、网络中的数据节点,NULL(BLACKHOLE)。
  • 事务处理能力:多个语句的事务提交与回滚及事务的隔离级别。
  • 锁:锁的粒度超过表级别,MVCC。
  • 表分区:特定于引擎的功能。
  • 备份及恢复:复杂的存储引擎(InnoDB和NDB)内部保证一致性,以改善性能。文件系统的备份适用于简单的引擎(MyISAM)
  • 优化:部分引擎使用索引、内部缓存、缓冲,及内存,以提升性能。
  • 参照整合性:使用外键。
  • 全文检索
  • 空间地理数据