存储引擎其实就是如何存储数据,如何为存储的数据建立索引和如何更新/如何查询数据等技术等的方法,因为关系数据库中数据上以表的形势存储的,所有存储引擎也可以成为表类型。
查看MySQL中支持的存储引擎- 使用show engines 可以查看MySQL中支持的存储引擎
mysql> show engines g +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ 9 rows in set (0.01 sec)
查询结果中engine参数值的就是存储引擎的名称,support参数值的是MySQL是否支持该类引擎,YES表示支持,Commit参数值对该引擎对评论,从查询结果中可以看出,MySQL中支持多个存储引擎,其中InnoDB为默认的存储引擎。
2. show variables 方式
mysql> show variables like 'have%'; +------------------------+----------+ | Variable_name | Value | +------------------------+----------+ | have_compress | YES | | have_dynamic_loading | YES | | have_geometry | YES | | have_openssl | YES | | have_profiling | YES | | have_query_cache | NO | | have_rtree_keys | YES | | have_ssl | YES | | have_statement_timeout | YES | | have_symlink | DISABLED | +------------------------+----------+ 10 rows in set (0.02 sec)InnoDB存储引擎
从Mysql5.5版本开始,InnoDB是默认的表存储引擎。其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读、同时被设计用来最有效的利用以及使用内存和CPU。
它的特点如下:
- InnoDB 存储引擎支持自动增长列AUTO_INCREMENT。自动增长的值不能为空,且必须唯一。
- InnoDB存储引擎支持外键。
- InnoDB存储引擎提供了良好的事务管理系/崩溃修复能力/并发控制,缺点是读写效率稍差,占用的数据空间相对较大。
InnoDB是以下情况的理想引擎:
- 更新密集的表
- 事务:InnoDB存储引擎是唯一支持事务的标准MySQL存储引擎,这是管理敏感数据的必须软件。
- 自动灾难恢复:与其他引擎不同,InnoDB表能够自动从灾难中恢复,虽然MyISAM表能在灾难后恢复,但是它的过程需要长很多。
MyISAM 是MySQL中常见的存储引擎,它曾是MySQL的默认存储引擎。它是基于ISAM存储引擎发展起来的。
MyISAM存储引擎的文件类型MyISAM存储引擎的表存储为三个文件,文件的名字与表名相同。扩展名包括frm/MYD/MYI。
- frm :存储表的结构
- myd:存储结构,是MYData的缩写。
- myi :存储索引,是MYIndex的缩写。
基于MyISAM存储引擎的表支持3中不同的存储格式,包括静态型/动态性/压缩性。
- 静态型
静态格式是MyISAM表的默认存储格式。当表不包含变量长度列(VARCHAR, BLOB, 或TEXT)时,使用这个格式。每一行用固定字节数存储。静态格式是三种存储格式中最简单和最安全的,同时也是最快的ondisk格式。
基本特征:
(1)CHAR列对列宽度为空间填补
(2)快速。
(3)容易缓存。
(4)由于每个记录位置固定,崩溃后容易重建。(5)无必要重新组织,通常比动态表需要更大的磁盘空间。 - 动态型
如果有表列定义为动态的,MySQL就回自动使用动态格式,虽然MyISAM动态表占用的空间比静态表锁占用少,但是空间的节省回影响性能,如果某个字段的内容发生改变,则其位置很可能就要移动,这回导致碎片的产生,随着碎片的越来越多,数据访问的性能就会相应的降低。
修复方式:
(1)尽可能使用静态数据类型
(2)经常使用OPTIMIZE TABLE 语句,它会整理表的碎片,恢复由于表更新和删除导致的空间丢失 - 压缩型
有时会创建在整个应用程序生命周期中都只读的表,如果是这种情况,就可以使用myisampack工具将其转换为压缩表来减少空间,在制定硬件配置下,性能的提升相当明显。
优点是占用空间小,处理速度快。缺点是不支持事务的完整性和并发性。
MEMORY存储引擎MEMORY存储引擎是一种特殊的存储引擎,它使用存储在内存中的内容来创建表,而且所有数据也是放在内存中,这些特性都与InnoDB存储索引/MyISAM存储索引不同。
- MEMORY存储引擎的文件存储形式。
每个机遇MEMORY存储引擎的表实际上对应一个磁盘文件,该文件的文件名与庙名相同,类型为frm,该文件值存储表的结构,而其数据文件,都是存储在内容中,这样有利于对数据的快速处理,提高效率,需要注意的是,服务器需要足够的内存来维持MEMORY存储引擎的使用。 - MEMORY存储引擎的索引类型
MEMORY默认存储引擎为哈希索引,速度要比B型树索引要快。 - MEMORY存储引擎的优缺点
MEMORY表的大小是收到限制的。表的大小取决于两个参数,分别是max_rows和max_heap_table_size,前者在创建表的时候可以指定,后者默认为16MB,可以根据需求扩大。
由于其存在于内存中的特性,所有该类表的处理速度非常快,但是数据容易丢失,生命周期短。
MEMORY不支持VARCHAR/BLOB/TEXT数据类型,因为这些表类型按固定长度的记录格式存储。
每个存储引擎都有各自的特点,选择合适的即可。
- InnoDB存储引擎可以用于事务处理的应用程序,具有众多特性,包括ACID事务支持/支持外键。
- MyISAM存储引擎:管理非事务表,它提供高速存储和检索,以及全文搜索能力。
- MEMORY存储引擎:数据都在内存中,处理速度比快,但是安全性不高,如果需要很快的读写但是对安全性要求不高,可以选择它。



