指的是不一样语言中与SQL的交互
系统管理和控制工具
管理缓冲用户链接,线程处理等须要缓存的需求。
负责监听对 MySQL Server 的各类请求,接收链接请求,转发全部链接请求到线程管理模块。每个链接上 MySQL Server 的客户端请求都会被分配(或建立)一个链接线程为 其单独服务。而链接线程的主要工做就是负责MySQLServer 与客户端的通讯,接受客户端的命令请求,传递 Server 端的结果信息等。线程管理模块则负责管理维护这些链接线程。包括线程的建立,线程的 cache 等。
接受用户的SQL命令,而且返回用户须要查询的结果。好比select from就是调用SQL Interface
SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。
在 MySQL中咱们习惯将全部 Client 端发送给 Server 端的命令都称为 query ,在 MySQL Server 里面,链接线程接收到客户端的一个 Query 后,会直接将该 query 传递给专门负责将各类 Query 进行分类而后转发给各个对应的处理模块。
主要功能:
SQL语句在查询以前会使用查询优化器对查询进行优化。就是优化客户端请求的 query(sql语句) ,根据客户端请求的 query 语句,和数据库中的一些统计信息,在一系列算法的基础上进行分析,得出一个最优的策略,告诉后面的程序如何取得这个 query 语句的结果
他使用的是“选取-投影-联接”策略进行查询。
用一个例子就能够理解:
select uid,name from user where gender = 1;
这个select 查询先根据where 语句进行选取,而不是先将表所有查询出来之后再进行gender过滤
这个select查询先根据uid和name进行属性投影,而不是将属性所有取出之后再进行过滤
将这两个查询条件联接起来生成最终查询结果
他的主要功能是将客户端提交 给MySQL 的 Select 类 query 请求的返回结果集 cache 到内存中,与该 query 的一个 hash 值 作一个对应。该 Query 所取数据的基表发生任何数据的变化以后, MySQL 会自动使该 query 的Cache 失效。在读写比例很是高的应用系统中, Query Cache 对性能的提升是很是显著的。固然它对内存的消耗也是很是大的。
若是查询缓存有命中的查询结果,查询语句就能够直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。好比表缓存,记录缓存,key缓存,权限缓存等
存储引擎接口模块能够说是 MySQL 数据库中最有特点的一点了。目前各类数据库产品中,基本上只有 MySQL 能够实现其底层数据存储引擎的插件式管理。这个模块实际上只是 一个抽象类,但正是由于它成功地将各类数据处理高度抽象化,才成就了今天 MySQL 可插拔存储引擎的特点。
从图2还能够看出,MySQL区别于其余数据库的最重要的特色就是其插件式的表存储引擎。
MySQL插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎自己无关,多是每一个数据库系统自己都必需的,如SQL分析器和优化器等,
而存储引擎是底层物理结构的实现,每一个存储引擎开发者均可以按照本身的意愿来进行开发。
注意:存储引擎是基于表的,而不是数据库。
show engines
显示安装的mysql提供的存储引擎类型show variables like '%storage_engine%'
显示默认使用的存储引擎类型mysql
对比项 | MyISAM | InnoDB |
---|---|---|
主外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
行表锁 | 表锁 | 行锁 |
缓存 | 只缓存索引,不缓存真实数据 | 索引和真实数据都会缓存,内存对于系统的性能有着决定性的影响 |
表空间 | 小 | 大 |
关注点 | 性能 | 事务 |