MySQL 常见存储引擎的优劣
程序员文章站
2022-03-31 07:54:46
查看所有存储引擎我们可以通过 show engines 命令来看到我们的 mysql server 提供了哪些引擎:show engines;+--------------------+-------...
查看所有存储引擎
我们可以通过 show engines
命令来看到我们的 mysql server 提供了哪些引擎:
show engines; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | engine | support | comment | transactions | xa | savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | innodb | default | supports transactions, row-level locking, and foreign keys | yes | yes | yes | | mrg_myisam | yes | collection of identical myisam tables | no | no | no | | memory | yes | hash based, stored in memory, useful for temporary tables | no | no | no | | blackhole | yes | /dev/null storage engine (anything you write to it disappears) | no | no | no | | myisam | yes | myisam storage engine | no | no | no | | csv | yes | csv storage engine | no | no | no | | archive | yes | archive storage engine | no | no | no | | performance_schema | yes | performance schema | no | no | no | | federated | no | federated mysql storage engine | null | null | null | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ 9 rows in set (0.00 sec)
innodb 存储引擎
innodb 是事务性数据库的首选引擎,支持事务安全表(acid),支持行锁定和外键。mysql5.5.5 之后,innodb 作为默认存储引擎。innodb 主要特性有:
- innodb 给 mysql 提供了具有提交、回滚和崩溃恢复能力的事务安全(acid 兼容)存储引擎。innodb 锁定在行级并且也在 select 语句中提供一个类似 oracle 的非锁定读。这些功能增加了多用户部署和性能。在 sql 查询中,可以*地将 innodb 类型的表与其他 mysql 的表的类型混合起来,甚至在同一个查询中也可以混合。
- innodb 是为处理巨大数据量所设计的性能为重的,它的 cpu 效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。
- innodb 存储引擎完全与 mysql 服务器整合,innodb 存储引擎在主内存中维持了自己的缓冲池来缓存数据和索引。innodb 将它的表和索引存在一个逻辑表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与 myisam 表不同,比如在 myisam 表中每个表被存在分离的文件中。innodb 表可以是任何尺寸,即使在文件尺寸被限制在 2gb 的操作系统上。
- innodb 支持外键完整性约束(foreign key)。存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显式在表定义时制定主键,innodb 会为每一行生成一个 6b 的 rowid,并以此作为主键。
- innodb 被用在众多需要高性能的大型数据库站点上。
- innodb 不创建目录,使用 innodb 时,mysql 将在 mysql 数据目录下创建一个名为 ibdata1 的 10mb 大小的自动扩展数据文件,以及两个名为 ib_logfile0 和 ib_logfile1 的 5mb 大小的日志文件。
myisam 存储引擎
myisam 是基于 isam 的存储引擎,并对其进行扩展。它是在 web、数据存储和其他应用环境下最常使用的存储引擎之一。myisam 拥有较高的插入、查询速度,但不支持事务。在 mysql5.5.5 之前的版本中,myisam 是默认存储引擎。myisam 主要特性有:
- 大文件(达 63 位文件长度)在支持大文件的文件系统和操作系统上被支持。
- 当把删除、更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片。这要通过合并相邻被删除的块,以及若下一个块被删除,就扩展到下一块来自动完成。
- 每个 myisam 表最大索引数是 64,这可以通过重新编译来改变。每个索引最大的列数是 16 个。
- 最大的键长度是 1000b,这也可以通过编译来改变。对于键长度超过 250b 的情况,一个超过 1024b 的键将被用上。
- blob 和 text 列可以被索引。
- null 值被允许在索引的列中。这个值占每个键的 0-1 个字节。
- 所有数字键值以高字节优先被存储以允许一个更高的索引压缩。
- 每表一个 auto_increment 列的内部处理。myisam 为 insert 和 update 操作自动更新这一列。这使得 auto_increment 列更快(至少 10%)。在序列项的值被删除之后就不能再利用。
- 可以把数据文件和索引文件放在不同目录。
- 每个字符列可以有不同的字符集。
- 有 varchar 的表可以固定或动态记录长度。
- varchar 和 char 列可以多达 64kb。
- 使用 myisam 引擎创建数据库,将产生 3 个文件。文件的名字以表的名字开始,扩展名代表了文件的类型:frm 文件存储表定义,myd 代表数据文件,myi 代表索引文件。
memory 存储引擎
memory 存储引擎将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问。memory 主要特性有:
- memory 表的每个表可以有多达 32 个索引,每个索引 16 列,以及 500b 的最大键长度。
- memory 存储引擎执行 hash 和 btree 索引。
- 可以在一个 memory 表中有非唯一键。
- memory 表使用一个固定的记录长度格式。
- memory 不支持 blog 或 text 列。
- memory 支持 auto_increment 列和对可包含 null 值的列的索引。
- memory 表在所有客户端之间共享(就像其他任何非 temporary 表)。
- memory 表内容被存在内存中,内存是 memory 表和服务器在查询处理时的空闲中创建的内部表共享的。
- 当不再需要 memory 表的内容时,要释放被 memory 表使用的内存,应该执行 delete from 或 truncate table,或者删除整个表(用 drop table)。
以上就是mysql 常见存储引擎的优劣的详细内容,更多关于mysql 存储引擎的优劣的资料请关注其它相关文章!
上一篇: 芒种吃哪几种传统食物
下一篇: 最好养的观赏鱼,懒人新手都过来看看