【详解】MySQL体系结构和存储引擎
目录
1. 定义数据库和实例
- 数据库:保存数据的数据
文件
- 数据库实例:由数据库后台进程线程以及一个共享内存区组成。是真正
用来操作数据库文件的
- 通常一个数据库对应一个实例,但
在集群中,多个实例对应一个数据库
mysql是单进程多线程的,数据库实例在操作系统上的表现就是一个线程
2. MySQL体系结构
MySQL由以下几部分组成
- 连接池组件
- 管理服务和工具组件
- SQL接口组件
- 查询分析器组件
- 优化器组件
- 缓冲组件
插件式存储引擎
(和其他数据库最大的区别)- 物理文件
<mark>注:存储引擎是基于表的</mark>
3. MySQL表存储引擎
3.1 InnoDB存储引擎
支持事务
,主要面向在线事务处理- 特点:
行锁设计
、支持外键
,并支持类似于Oracle的非锁定读
,即默认情况下读取操作不会产生锁 - 在Windows中是默认引擎
- 将数据放在一个逻辑的表空间,将每个表单独放在一个独立的ibd文件中
- 通过使用
多版本并发控制
来获得高并发性,并且实现了SQL标准的4种隔离级别 - 提供了
插入缓冲
、二次写
、自适应哈希索引
、预读
等高性能和高可用功能 - 数据的
存储采用了聚集的方式
,每个表的存储都按照主键的顺序存放
3.2 MyISAM存储引擎
不支持事务、行锁和全文索引,对于在线分析处理操作速度快
- 除了Windows,是MySQL的默认引擎
- 表由MYD和MYI组成。MYD放数据文件,MYI放索引文件。
- 默认支持256T单表数据
3.3 NDB
- 是
集群存储引擎
- 特点:将索引数据放在内存中
- 主键查找的速度极快,是高可用、高性能的集群系统
- 连接的操作(join)速度很慢
3.4 Memory引擎
- 将表中数据放在
内存
中,用来存放临时表 - 使用的哈希索引
- 只支持表锁,
并发性能差
跟NoSQL差异
- nosql的数据不需要按照行列的标准要求
- nosql返回数据直接是json,比较方便
3.5 Archive存储引擎
- 支持INSERT和SELECT操作
适合存储日志信息,先将数据压缩再存储
3.6 Federated存储引擎
- 指向远程服务器的表