徐老师的这篇文章介绍了MySQL的SQL层和存储层相关的信息,言简意赅,便于我们从宏观层面,了解一下。
原文链接参见《MySQL架构——SQL层和存储层》。
当MySQL的客户端与服务器建立连接后,MySQL将在SQL层处理每个查询。
SQL层包括解析器、授权、优化器、执行查询,及查询日志。
解析器:验证查询语句的语法,语义并将其转换为标准格式。
授权:验证连接的用户是否具有执行语句的权限,以及是否具有查询参照的对象权限。
优化器:为每个查询创建一个优化的执行计划,包括使用哪个索引,按照一定的顺序处理表等。
执行查询:按照查询计划执行每个查询。
查询日志:记录服务器接收或执行的查询。
SQL层按照上述顺序处理每个查询。
存储层
使用多种存储引擎是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)
- 优化:部分引擎使用索引、内部缓存、缓冲,及内存,以提升性能。
- 参照整合性:使用外键。
- 全文检索
- 空间地理数据