mysql逻辑架构
本文简单介绍一下mysql的逻辑架构和各个部分的功能。
mysql 逻辑架构组成
在了解数据库的架构之前先简单的从数据库的功能上尝试猜测一下数据库可能有哪些功能模块,mysql的功能简单来看有以下几点:
1 数据传输和连接管理
mysql 数据库最上层的用户接口包括一个命令行的操作界面和jdbc等使用的基于tcp网络连接的客户端,可以发送各种数据操作命令和数据库管理命令
2 数据操作功能
用户使用mysql 对数据的处理基于sql语句,显然操作系统不支持使用sql处理数据,那么将sql转化为系统底层的文件读写操作这个过程需要mysql实现一个查询解析器
3 数据管理功能
用户的所有操作最终都将转化为对操作系统中的文件的操作,这是一个独立的功能模块,需要封装为一个独立的模块供查询解析器调用
根据《高性能Mysql第三版》1.1节的描述,mysql的架构划分确实和上面差不多,分为三层:
连接/线程处理
这一层是很多基于C\S的工具都有的,例如Redis,MongoDB等等,mysql 为每个客户端连接分配了一个可用的线程,一个连接的查询操作都在它拥有的线程内执行,Mysql 5.5之后使用了线程池来服务大量的连接,这样就无需为每个连接创建和销毁线程。
查询优化
对于select语句,mysql在执行查询之前会首先检查一下是否缓存了对应的查询,当然这个优化默认的关闭的,开启之后才会起作用,一般建议开启,以相对较小的内存空间代价来换取更快的访问速度。开启方法为在
/etc/my.cnf中添加
query_cache_size = 20M
query_cache_type = ON
然后重启mysqld服务
mysql 在解析查询的时候会首先构造解析树,进而对解析树进行优化,包括重写查询,调整表的读取顺序,决定需要选用的索引等等,用户也可以使用hint 关键字提示mysql 选用合适的索引。使用explain 关键字可以查看该查询的执行计划,包括使用的索引,以及索引类型等等,用户可以根据explain的输出调整查询语句的结构,从而提高访问的速度。
存储引擎
存储引擎是数据存储模块,是mysql的核心组件。mysql 中每创建一个数据库,就在数据目录中创建一个同名的文件夹,数据库中的数据都保存在这个文件夹中,每创建一个表,则会在这个文件夹中创建一个同名的.frm文件,保存表的定义。mysql 常用的存储引擎有
以下两个:
InnoDB
将数据存在表空间(tablespace)中,使用mvcc和间隙锁来做同步控制
MyISAM
不支持事务,简单快速