InnoDB
InnoDB
基于聚簇索引建立,MySQL innodb的主键索引是簇集索引,不是主键索引的就是非簇集索引MyISAM
memory
archive
blackhole
federated
merge
(已被放弃)两种引擎所使用的索引的数据结构都是B+树!
关于索引详情:MyISAM 和 InnoDB 索引的区别
簇集索引:索引的叶子节点存的是整个单条记录的所有字段值。
非簇集索引:索引的叶子节点存的是被索引字段的值。
InnoDB 是MySQL默认的事务型引擎,也是最重要、最广泛的存储引擎。
FULLTEXT
类型的索引,而且它没有保存表的行数,当SELECT COUNT(*) FROM TABLE
时需要扫描全表。Indexed Sequential Access Method
)在 5.1 之前,MyISAM 是默认的引擎,MyISAM 有大量的特性,包括全文索引、压缩、空间函数。但是 MyISAM 不支持事务和行级锁,而且在崩溃后无法安全恢复。
MyISAM 并不是无所是处。对于一些只读数据,或者表空间较小,可以忍受恢复操作,可以使用 MyISAM。
SELECT COUNT(*) FROM TABLE
时只需要直接读取已经保存好的值而不需要进行全表扫描。因此,如果表的读操作远远多于写操作且不需要数据库事务的支持,那么MyISAM也是很好的选择。.MYD
、.MYI
扩展名。MyISAM 表可以包含动态或者静态行。MySQL 会根据表定义选择哪种行格式。MyISAM 表的行记录数,取决于磁盘空间和操作系统中的单个文件最大尺寸。在 MySQL 中,默认配置只能存储 256TB 的数据。因为指向数据记录的指针长度是 6 字节。需要修改可以修改表的
MAX_ROWS
和AVG_ROW_LENGTH
选项。两个相乘是最大的大小。会导致重建索引。
delay_key_write
选项,在每次修改执行完成时,不会立刻将修改的索引数据写入磁盘,而是写到缓存区,只有在清理缓存区或者关闭表的时候才会将索引写入磁盘。这可以极大的提升写入性能,但是在主机崩溃时会造成索引损坏,需要执行修复操作。如果需要快速地访问数据,并且这些数据不会被修改,重启以后丢失也没有关系,那么使用 Memory 表(以前也叫做 HEAP 表)是非常有用的。Memory 表至少比 MyISAM 表要快一个数量级,因为所有的数据都保存在内存中,不需要进行磁盘 I/O。Memory 表的结构在重启以后还会保留,但数据会丢失。
Memroy 表在很多场景可以发挥好的作用:
Memory 表支持 Hash 索引,因此查找操作非常快。虽然 Memory 表的速度非常快,但还是无法取代传统的基于磁盘的表。Memroy 表是表级锁,因此并发写入的性能较低。它不支持 BLOB 或 TEXT 类型的列,并且每行的长度是固定的,所以即使指定了 VARCHAR 列,实际存储时也会转换成 CHAR,这可能导致部分内存的浪费。如果 MySQL 在执行查询的过程中需要使用临时表来保存中间结果,内部使用的临时表就是 Memory 表。如果中间结果太大超出了 Memory 表的限制,或者含有 BLOB 或 TEXT 字段,则临时表会转换成 MyISAM 表。
Archive 引擎支持是 Insert,Select 操作,现在支持索引,Archive 引擎会缓存所有的写,并利用 zlib 对写入行进行压缩,所以比 MyISAM 表的磁盘 IO 更少。但是在每次 Select 查询都需要执行全表扫描。所以在 Archive 适合日志和数据采集应用。这类应用在分析时往往需要全表扫描忙活着更快的 Insert 操作场景中也可以使用。
Archive 引擎支持行级锁和专用的缓存区,所以可以实现高并发写入,在查询开始到返回表存在的所有行数之前,Archive 会阻止其他 Select 执行,用来实现一致性读。另外也实现了批量写入结束前批量写入数据对读操作不可见,这种机制模仿了事务和 MVCC 的特性,但是 Archive 不是一个事务型引擎,而是针对高写入压缩做了优化的简单引擎。
Blackhole 没有实现任何存储机制,它会舍弃所有写入数据,不做任何保存,但是服务器会记录 Blackhole 表的日志,用于复制数据到备库,或者只是简单的记录到日志,这种特殊的存储引擎可以在一些特制的复制架构和日志审核时发挥作用。但是不推荐。
Federated 引擎是访问其他 MySQL 服务器的一个代理,它会创建一个到远程 MySQL 服务器的客户端连接,并将查询传输到远程服务器执行,然后提取或者发送需要的数据。最初设计该存储引擎是为了和企业级数据库如 MicrosoftSQLServer 和 Oracle 的类似特性竞争的,可以说更多的是一种市场行为。尽管该引擎看起来提供了一种很好的跨服务器的灵活性,但也经常带来问题,因此默认是禁用的。
Merge 引擎是 MyISAM 引擎的一个变种。Merge 表是由多个 MyISAM 表合并而来的虚拟表。如果将 MySQL 用于日志或者数据仓库类应用,该引擎可以发挥作用。但是引入分区功能后,该引擎已经被放弃。
CSV 引擎可以将普通的 CSV 文件作为 MySQL 表来处理,但是这种表不支持索引,CSV 可以在数据库运行时拷贝或者拷出文件,可以将 Excel 等电子表格中的数据存储未 CSV 文件,然后复制到 MySQL 中,就能在 MySQL 中打开使用。同样,如果将数据写入到一个 CSV 引擎表,其他外部程序也可以从表的数据文件中读取 CSV 的数据。因此 CSV 可以作为数据交换机制。非常好用。
原文:https://www.cnblogs.com/holm/p/12984760.html