MySQL 存储引擎
目录
MySQL 也有很多存储引擎,不过常用的还是 InnoDB 引擎,本文就汇总一下这些存储引擎。
- MySQL 数据类型
- MySQL 用户管理
- MySQL 关键字查询
- MySQL 字符串函数
- MySQL 字符串连接函数
- MySQL 忘记 root 密码后重置
- MySQL 最值查询
- MySQL 日期时间函数
- MySQL 联合查询
- MySQL 查询当前年、季、月、周的第一天和最后一天
- MySQL 支持 emoji 图标的设置
- MySQL 存储引擎
- MySQL 隔离级别及其脏读不可重复读幻读
MySQL 的存储引擎
Archive
:用于数据存档的引擎(数据行被插入后就不能再修改了)。非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive
拥有高效的插入速度,但其对查询的支持相对较差BDB
:源自Berkeley DB
,事务型数据库的另一种选择,支持COMMIT
和ROLLBACK
等其他事务特性BlackHole
:黑洞引擎(写操作是删除数据,读操作是返回空白记录)。由于写入的任何数据都会消失。一般用于记录binlog
做复制的中继CSV
:逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个.CSV
文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV
存储引擎不支持索引Example
:实例(存根)存储引擎。官方实例Falcon
:用来进行事务处理的存储引擎Federated
:用来访问远程数据表的存储引擎。将不同的MySQL
服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用InnoDB
:具备外键支持功能的事务处理引擎。MySQL-5.5
版本后MySQL
的默认数据库引擎,是专为事务设计的存储引擎,支持ACID
事务,支持外键和行级锁定,拥有高并发处理能力。但是,InnoDB
在创建索引和加载数据时,比MyISAM
慢Memory
:内存引擎。所有数据置于内存,表结构不是存储在内存中的存储引擎,查询时不需要执行磁盘I/O
操作,所以要比MyISAM
和InnoDB
快很多倍。但是会占用和数据量成正比的内存空间。并且其内容会在MySQL
重新启动时丢失,表结构不会丢失Merge/MRG_MYISAM
:管理由多个MyISAM
数据表构成的数据表集合。将一定数量的MyISAM
表联合而成一个整体,在超大规模数据存储时很有用MyISAM
:不支持事务和行级锁,所以MyISAM
引擎速度很快,性能优秀。MyISAM
可以对整张表加锁,支持并发插入,支持全文索引NDB/Cluster
:MySQL Cluster
专用存储引擎。高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用PERFORMANCE_SCHEMA
:Performance Schema
查看数据库支持的引擎
|
|
MyISAM 和 InnoDB
名称 | MyISAM | InnoDB | 备注 |
---|---|---|---|
使用场景 | 为速度而设计,和 SELECT 搭配使用更好 | 为高可靠性和高性能而设计,适合处理大量数据 | |
表锁类型 | 表级锁,特定的操作会将整张表锁起来,上锁期间,表中的数据不能进行其它操作。偏向静态数据,动态数据会影响性能 | 行级锁,只对 SELECT,UPDATE,DELETE 操作的特定数据加上行锁,上锁期间,表中的其它数据依然能被操作 | |
外键支持 | 不支持 | 支持,对外键和引用完整性支持,包括递归式删除和更新 | |
事务支持 | 不支持,没有 COMMIT 和 ROLLBACK ,对操作没有回退的余地 | 支持,执行 COMMIT 和 ROLLBACK 操作,可以将事务中的数据变化进行回滚,崩溃后的自动恢复 | |
集群支持 | 不支持 | 并不完全支持。可以将表转换为 NDB 存储引擎而用在集群环境中 | |
数据操作 | 数据压缩,自我复制,查询缓存,数据加密 | 数据压缩,自我复制,查询缓存,数据加密 | |
全文索引 | 支持全文检索,需要通过 FULLTEXT 索引来实现 | 不支持 FULLTEXT 类型的全文索引,但是 InnoDB 可以使用 sphinx 插件支持全文索引,并且效果更好 | |
存储结构 | 每个 MyISAM 在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm 文件存储表定义。数据文件的扩展名为 .MYD - MYData 。索引文件的扩展名是 .MYI - MYIndex | 所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB | |
存储空间 | 可被压缩,存储空间较小。支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉),动态表,压缩表 | 需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引 | |
AUTO_INCREMENT | 可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增 | InnoDB 中必须包含只有该字段的索引。引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列 | |
表主键 | 允许没有任何索引和主键的表存在,索引都是保存行的地址 | 如果没有设定主键或者非空唯一索引,就会自动生成一个 6 字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值 | |
表的行数 | 保存有表的总行数,如果 SELECT COUNT(*) FROM table; 会直接取出出该值 | 没有保存表的总行数,如果 SELECT COUNT(*) FROM table; 就会遍历整个表,消耗相当大,但是在加了 wehre 条件后,MyISAM 和 InnoDB 处理的方式都一样 | |
其它支持 | 支持空间数据类型和 SPATIAL 索引 | InnoDB 存储引擎会把数据表集中存储在一个共享的表空间里 |