数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作
。简而言之,存储引擎就是指表的类型。数据库的存储引擎决定了表在计算机中的存储方式。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。
在 MySQL 中,可以对每一个表使用不同的存储引擎。MySQL 5.7 支持的存储引擎有InnoDB、MyISAM、Memory、Merge、Archive、CSV、BLACKHOLE
等,下面将简单介绍InnoDB、MyISAM和Memory三种常用的存储引擎。
MySQL 5.6及以后的版本,默认的存储引擎是InnoDB。
InnoDB引擎支持事务(ACID),支持崩溃修复和自增列,支持行锁定和外键。
其特点如下:
ACID
。auto_increment
设置自动增长列。在 MySQL 5.1 版本及之前的版本,MyISAM是默认的存储引擎。
MyISAM引擎查询效率高,但是不支持事务,也不支持外键。使用此引擎创建数据库会生成3个文件,包括表定义文件frm、表数据文件myd和索引文件myi。
其特点如下:
Memory存储引擎将表中的数据存储到内存RAM
中,为查询和引用其他表数据提供快速访问。每个Memory表会与一个磁盘文件frm相关联。
其特点如下:
不支持TEXT和BLOB类型
。对于字符串类型的数据,VARCHAR会被自动存储为CHAR
,造成空间浪费。对于上述三种引擎,我们对其支持的特性总结如下表。
- | 存储限制 | 事务安全 | 锁机制 | B树索引 | 哈希索引 | 全文索引 | 数据缓存 | 索引缓存 | 空间使用 | 内存使用 | 写入速度 | 支持外键 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
InnoDB | √ | √ | 行锁 | √ | × | × | √ | √ | 高 | 高 | 低 | √ |
MyISAM | √ | × | 表锁 | √ | × | √ | – | √ | 低 | 低 | 高 | × |
Memory | √ | × | 表锁 | √ | √ | × | √ | √ | – | 中等 | 高 | × |
结合上面的表格,有关如何选择运用这三种存储引擎,我们可以得出:
总的来说,不同的存储引擎适合不同的应用场景,我们需要选择合适的存储引擎来满足性能要求和实际需求。
参考文章:MySQL数据类型和存储引擎