谦虚使人退步,如果自己都不为自己骄傲,那别人怎能为你骄傲?
--《天珠变》
目录
1.Mysql基本架构
Mysql架构如上图所示,包括
-
管理服务和工具组件:系统管理和控制工具,例如备份恢复、Mysql复制、集群等
-
连接池组件:管理、缓冲用户的连接,线程处理等需要缓存的需求
-
SQL接口组件:接受用户的SQL命令,并且返回用户需要查询的结果
-
查询分析器组件:SQL命令传递到解析器的时候会被解析器验证和解析(权限、语法结构)
-
优化器组件:SQL语句在查询之前会使用查询优化器对查询进行优化
-
缓存组件:如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据
-
插件式存储引擎:存储引擎是如何管理操作数据(存储数据、如何更新、查询数据等)的一种方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)
-
物理文件
2.存储引擎比较
下表是Mysql几种存储引擎的对比,oracle不存在存储引擎的概念,同时列入oracle进行简单对比
-
InnoDB存储引擎
从MySql 5.5.8版本开始,InnoDB存储引擎是默认的存储引擎。InnoDB通过多版本并发控制(MVCC)获得高并发性,支持事务并实现了四种隔离级别,支持行级锁和外键。InnoDB每张表都是按照主键的顺序存放的,如果没有显示指定主键,InnoDB存储引擎会给每行生成一个6字节的ROWID作为主键。
-
MyISAM存储引擎
MyISAM存储引擎不支持事务,采用表锁设计,支持全文索引,在Mysql 5.5.8版本之前是默认的存储引擎。MyISAM只缓存索引文件但不会缓存数据文件,数据文件由操作系统进行缓存,其他的存储引擎是有LRU算法进行数据文件的缓存。
-
Memory存储引擎
Memory存储引擎使用内存存储数据,所以速度非常快,但是数据库重启或崩溃,数据会消失,适合用于存储临时数据的临时表。Memory默认使用哈希索引,而不是B+树索引。
-
Archive存储引擎
Archive存储引擎只支持Insert和Select,使用zlib算法对数据进行压缩后存储,压缩比可以达到10:1,非常适合存储归档数据,使用行锁提供高性能的并发新增操作。
3.InnoDB存储引擎
优势:InnoDB是第一个完整支持ACID的Mysql存储引擎,特点是行锁设计、支持MVCC、支持外键、支持一致性非锁定读,同时被设计成最有效的利用内存和CPU,InnDB在1.2.x版本开始支持全文索引。
InnoDB在实现上维护了一个内存池,内存池有多个内存块组成,同时维护了多个后台线程。
内存池负责
-
维护所有进程/线程需要访问的多个内部数据结构
-
缓存磁盘上的数据