客户端通过以SQL语句的形式发送请求给服务器端从而从表中获取数据或对表数据进行修改。而服务端程序使用以下两层处理模型以执行每个语句请求:
- 上层包括SQL解析器(parser)和优化器(optimizer)。
- 下层包括了一组存储引擎。
需要注意的是,SQL层并不依赖于存储引擎管理的表。这意味着客户端通常不需要考虑哪个引擎被涉及处理其SQL语句,也不用考虑访问和更新的表是受到哪个引擎的管理。当然也有例外:
- CREATE TABLE语句有ENGINE项可用于在建立表时启用你所定义的存储引擎。ALTER TABLE语句也含有一个ENGINE项可以使你能将原表转换使用一个不同的存储引擎。
- 一些索引类型仅在某些特定存储类型中可用。例如, 仅MyISAM引擎支持空间索引(spatial index), 仅MyISAM, InnoDB(5.6.4以上)支持全文索引(full-text)等。
- COMMIT和ROLLBACK仅对由事务型存储引擎(如InnoDB)管理的表有效果。
存储引擎细分
下图简单展示了MySQL服务和其存储引擎之间的交互。
依赖存储引擎不同会有以下不同:
- 存储方法 – 每张表中的数据按其自身的方法进行存储。
- 事务处理能力 – 某些存储引擎可以对事务进行处理,在执行多SQL语句时能确保数据库的完整性。
- 锁 – 是指每个引擎对于多线程执行场景中同一个资源的访问限制及同步机制处理。
- 备份恢复 – 基于不同的存储方法,表数据的备份和恢复也有区分。
- 优化 – 对于数据存储的优化和通过MySQL服务器的数据抽取,每个存储引擎都有其特定的优化点。
- 特定特性 – 某些引擎具有一些不同的特性包括全文搜索,参照完整性和处理空间数据的能力。
多数MySQL服务器会以相同的方式进行操作,即所有的常用SQL语句都是引擎无关的。当然,其优化器可能会按不同的存储引擎做出不同的优化判断,但也都是通过所有引擎都支持的一套标准接口(API)进行所有处理。
Comment