面试官让我聊聊Mysql基础架构
Mysql逻辑架构图
连接器(Connectors)
Mysql与不同语言的连接管理
连接池(Connection Pool)
用户管理缓冲用户的连接
系统管理和控制工具(Management Serveices & Utilities)
SQL接口(SQL Interface)
接受用的SQL,如DML,DDL
解析器(Parser)
解析SQL,词法解析、语法解析
优化器(Optimizer)
对SQL进行优化,如组合索引的顺序优化、jion驱动表的优化
查询缓存(Caches&Buffers)
对查询结果进行缓存,下次相同的查询直接从缓存中取,使用SQL的hash值作为唯一key
存储引擎
常用存储引擎为InnoDB、MyIsam、Memory
文件系统
数据文件、日志文件,Mysql的数据和索引是以文件的形式存储在磁盘上的
Mysql存储引擎
InnoDB |
常用存储引擎,Mysql5.5版本之后默认使用的存储引擎,支持行锁、事务、崩溃修复能力、多版本并发控制,对于事务要求比较高的表、频繁删除、更新的操作的表使用该存储引擎 |
MyIsam |
不支持锁、事务,比较高的读写效率,对于需要频繁插入、读取的操作且对事务无要求的表可以使用该存储引擎 |
Memory |
内存存储,拥有极高的拆入,更新和查询效率。重启之后数据丢失,对于临时表可以使用该存储引擎 |
查看存储引擎:
mysql> show engines;
可以看到mysql所有的存储引擎,默认为InnoDB
InnoDB和MyISAM的区别:
InnoDB |
MyISAM |
|
存储文件 |
.frm 表定义文件 .ibd 数据文件和索引文件 |
.frm 表定义文件 .myd 数据文件 .myi 索引文件 |
锁 |
表锁、行锁 |
表锁 |
事务 |
支持 |
不支持 |
外键 |
支持 |
不支持 |
count |
扫表 |
有存储数量的地方 |
注意,同一个数据库也可以使用多种存储引擎的表。如果一个表要求比较高的事务处理,可以选择InnoDB。这个数 据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询的临时表,可以选择MEMORY 存储引擎。
执行流程
下一篇将会介绍流程的具体细节与日志文件