1、MySQL数据库由后台线程以及一个共享内存区组成,在系统上的表现就是一个进程,是一个单进程多线程架构的数据库实例
2、区分数据库和数据库实例的概念
- 数据库
是文件的集合,是依照某种数据模型组织起来并存放于二级存储器中的数据集合
- 数据库实例
是程序,是位于用户和操作系统之间的一层数据管理软件
3、存储引擎是基于表的,而不是数据库
MySQL存储引擎
1、InnoDB存储引擎
- 特点:行锁设计、支持外键、支持非锁定读
- 使用next-key-locking的策略避免幻读现象
- 提供插入缓冲、二次写、自适应哈希索引、预读
- 采用聚集的方式存储表中数据
2、MyISAM存储引擎
- 不支持事务、表锁设计,支持全文搜索
- 缓冲池只缓存索引文件,不缓存数据文件
- MyISAM存储引擎表由MYD(存放数据文件)和MYI(存放索引文件)组成
3、NDB存储引擎
- 数据全部放在内存中,因此主键查找速度极快
- 连接操作(JOIN)是在MySQL数据层完成而不是在存储引擎层,意味着复杂的连接操作需要巨大的网络开销,因此查询速度很慢
4、Memory存储引擎
- 表中的数据存放在内存,数据库重启或崩溃表中的数据都会消失
- 适合存储临时数据的临时表,以及数据仓库的纬度表
- 默认哈希索引
- 只支持表锁,并发性能差,不支持TEXT和BLOB列类型
- 存储变长字段时按照定长字段方式,浪费内存(eBay工程师给出了patch解决方案)
5、Archive存储引擎
- 只支持INSERT和SELECT操作,5.1版本之后支持索引
- 适合存储归档数据,如ri’zhi
6、Federated存储引擎
- 不存放数据,只是指向一台远程MySQL数据库服务器上的表
7、Maria存储引擎
- 支持缓存数据和索引文件
- 行锁设计
- 提供MVCC功能
- 支持事务和非事务安全的选项