欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL 常见存储引擎的优劣

程序员文章站 2022-06-24 22:15:27
查看所有存储引擎我们可以通过 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 主要特性有:

  1. innodb 给 mysql 提供了具有提交、回滚和崩溃恢复能力的事务安全(acid 兼容)存储引擎。innodb 锁定在行级并且也在 select 语句中提供一个类似 oracle 的非锁定读。这些功能增加了多用户部署和性能。在 sql 查询中,可以*地将 innodb 类型的表与其他 mysql 的表的类型混合起来,甚至在同一个查询中也可以混合。
  2. innodb 是为处理巨大数据量所设计的性能为重的,它的 cpu 效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。
  3. innodb 存储引擎完全与 mysql 服务器整合,innodb 存储引擎在主内存中维持了自己的缓冲池来缓存数据和索引。innodb 将它的表和索引存在一个逻辑表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与 myisam 表不同,比如在 myisam 表中每个表被存在分离的文件中。innodb 表可以是任何尺寸,即使在文件尺寸被限制在 2gb 的操作系统上。
  4. innodb 支持外键完整性约束(foreign key)。存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显式在表定义时制定主键,innodb 会为每一行生成一个 6b 的 rowid,并以此作为主键。
  5. innodb 被用在众多需要高性能的大型数据库站点上。
  6. innodb 不创建目录,使用 innodb 时,mysql 将在 mysql 数据目录下创建一个名为 ibdata1 的 10mb 大小的自动扩展数据文件,以及两个名为 ib_logfile0 和 ib_logfile1 的 5mb 大小的日志文件。

myisam 存储引擎

myisam 是基于 isam 的存储引擎,并对其进行扩展。它是在 web、数据存储和其他应用环境下最常使用的存储引擎之一。myisam 拥有较高的插入、查询速度,但不支持事务。在 mysql5.5.5 之前的版本中,myisam 是默认存储引擎。myisam 主要特性有:

  1. 大文件(达 63 位文件长度)在支持大文件的文件系统和操作系统上被支持。
  2. 当把删除、更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片。这要通过合并相邻被删除的块,以及若下一个块被删除,就扩展到下一块来自动完成。
  3. 每个 myisam 表最大索引数是 64,这可以通过重新编译来改变。每个索引最大的列数是 16 个。
  4. 最大的键长度是 1000b,这也可以通过编译来改变。对于键长度超过 250b 的情况,一个超过 1024b 的键将被用上。
  5. blob 和 text 列可以被索引。
  6. null 值被允许在索引的列中。这个值占每个键的 0-1 个字节。
  7. 所有数字键值以高字节优先被存储以允许一个更高的索引压缩。
  8. 每表一个 auto_increment 列的内部处理。myisam 为 insert 和 update 操作自动更新这一列。这使得 auto_increment 列更快(至少 10%)。在序列项的值被删除之后就不能再利用。
  9. 可以把数据文件和索引文件放在不同目录。
  10. 每个字符列可以有不同的字符集。
  11. 有 varchar 的表可以固定或动态记录长度。
  12. varchar 和 char 列可以多达 64kb。
  13. 使用 myisam 引擎创建数据库,将产生 3 个文件。文件的名字以表的名字开始,扩展名代表了文件的类型:frm 文件存储表定义,myd 代表数据文件,myi 代表索引文件。

memory 存储引擎

memory 存储引擎将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问。memory 主要特性有:

  1. memory 表的每个表可以有多达 32 个索引,每个索引 16 列,以及 500b 的最大键长度。
  2. memory 存储引擎执行 hash 和 btree 索引。
  3. 可以在一个 memory 表中有非唯一键。
  4. memory 表使用一个固定的记录长度格式。
  5. memory 不支持 blog 或 text 列。
  6. memory 支持 auto_increment 列和对可包含 null 值的列的索引。
  7. memory 表在所有客户端之间共享(就像其他任何非 temporary 表)。
  8. memory 表内容被存在内存中,内存是 memory 表和服务器在查询处理时的空闲中创建的内部表共享的。
  9. 当不再需要 memory 表的内容时,要释放被 memory 表使用的内存,应该执行 delete from 或 truncate table,或者删除整个表(用 drop table)。

以上就是mysql 常见存储引擎的优劣的详细内容,更多关于mysql 存储引擎的优劣的资料请关注其它相关文章!

相关标签: MySQL 存储引擎