美文网首页
mysql的各种引擎

mysql的各种引擎

作者: 这是不是一个帅气的昵称a | 来源:发表于2017-11-21 10:23 被阅读0次

    1.ISAM

    该引擎在读取数据方面速度很快,而且不占用大量的内存和存储资源;但是ISAM不支持事务处理、不支持外来键、不能够容错、也不支持索引。该引擎在包括MySQL 5.1及其以上版本的数据库中不再支持。

    2. MyISAM

    该引擎基于ISAM数据库引擎,除了提供ISAM里所没有的索引和字段管理等大量功能,MyISAM支持表级锁.缺点同上.

    3. HEAP(也称为MEMORY)

    该存储引擎通过在内存中创建临时表来存储数据。每个基于该存储引擎的表实际对应一个磁盘文件,该文件的文件名和表名是相同的,类型为.frm。该磁盘文件只存储表的结构,而其数据存储在内存中,所以使用该种引擎的表拥有极高的插入、更新和查询效率。这种存储引擎默认使用哈希(HASH)索引,其速度比使用B-+Tree型要快,但也可以使用B树型索引。由于这种存储引擎所存储的数据保存在内存中,所以其保存的数据具有不稳定性,比如如果mysqld进程发生异常、重启或计算机关机等等都会造成这些数据的消失,所以这种存储引擎中的表的生命周期很短,一般只使用一次。

    4.CSV(Comma-Separated Values逗号分隔值)

    使用该引擎的MySQL数据库表会在MySQL安装目录data文件夹中的和该表所在数据库名相同的目录中生成一个.CSV文件(所以,它可以将CSV类型的文件当做表进行处理),这种文件是一种普通文本文件,每个数据行占用一个文本行。该种类型的存储引擎不支持索引,即使用该种类型的表没有主键列;另外也不允许表中的字段为null。

    5.BLACKHOLE(黑洞引擎)

    该存储引擎支持事务,而且支持mvcc的行级锁,写入这种引擎表中的任何数据都会消失,主要用于做日志记录或同步归档的中继存储,这个存储引擎除非有特别目的,否则不适合使用。(作为主从复制中的中继重复器或在其上面添加过滤器机制,例如,假设你的应用需要从服务器侧的过滤规则,但传输所有二进制日志数据到从服务器会导致较大的网络流量。在这种情况下,在主服务器主机上建立一个伪从服务器进程。)

    解释:

    主服务器的操作写入二进制日志,伪mysqld进程作为从服务器,在伪mysqld进程上配置replicate-do和replicate-ignore规则,并且写一个新的,被过滤的二进制日志 。这个已过滤日志被提供给其他真正的从服务器。因为伪进程不存储任何数据,只消耗很小的额外的mysqld进程资源。这个类型的建立可以用额外复制从服务器来重复。

    6.ARCHIVE

    该存储引擎非常适合存储大量独立的、作为历史记录的数据。区别于InnoDB和MyISAM这两种引擎,ARCHIVE提供了压缩功能,拥有高效的插入速度,但是这种引擎不支持索引,所以查询性能较差一些。

    7.  InnoDB

    该存储引擎为MySQL表提供了ACID事务支持、系统崩溃修复能力和多版本并发控制(即MVCC Multi-Version Concurrency Control)的行级锁;该引擎支持自增长列(auto_increment),自增长列的值不能为空,如果在使用的时候为空则自动从现有值开始增值,如果有但是比现在的还大,则直接保存这个值; 该引擎存储引擎支持外键(foreign key) ,外键所在的表称为子表而所依赖的表称为父表。该引擎在5.5后的MySQL数据库中为默认存储引擎。

    8.PERFORMANCE_SCHEMA

    该引擎主要用于收集数据库服务器性能参数。这种引擎提供以下功能:提供进程等待的详细信息,包括锁、互斥变量、文件信息;保存历史的事件汇总信息,为提供MySQL服务器性能做出详细的判断;对于新增和删除监控事件点都非常容易,并可以随意改变mysql服务器的监控周期,例如(CYCLE、MICROSECOND)。

    9. Berkeley(BDB)

    该存储引擎支持COMMIT和ROLLBACK等其他事务特性。该引擎在包括MySQL 5.1及其以上版本的数据库中不再支持。

    10.Merge

    该引擎将一定数量的MyISAM表联合而成一个整体。

    11.  Cluster/NDB

    该存储引擎用于多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大、安全和性能要求高的场景。

    MySQL 存储引擎(MyISAM、InnoDB、NDBCluster)

    MyISAM

    1.特性

    不支持事务:MyISAM存储引擎不支持事务,所以对事务有要求的业务场景不能使用

    表级锁定:其锁定机制是表级索引,这虽然可以让锁定的实现成本很小但是也同时大大降低了其并发性能

    读写互相阻塞:不仅会在写入的时候阻塞读取,MyISAM还会在读取的时候阻塞写入,但读本身并不会阻塞另外的读

    只会缓存索引:MyISAM可以通过key_buffer缓存以大大提高访问性能减少磁盘IO,但是这个缓存区只会缓存索引,而不会缓存数据

    2.适用场景

    不需要事务支持(不支持)

    并发相对较低(锁定机制问题)

    数据修改相对较少(阻塞问题)

    以读为主

    数据一致性要求不是非常高

    3.最佳实践

    尽量索引(缓存机制)

    调整读写优先级,根据实际需求确保重要操作更优先

    启用延迟插入改善大批量写入性能

    尽量顺序操作让insert数据都写入到尾部,减少阻塞

    分解大的操作,降低单个操作的阻塞时间

    降低并发数,某些高并发场景通过应用来进行排队机制

    对于相对静态的数据,充分利用Query Cache可以极大的提高访问效率

    MyISAM的Count只有在全表扫描的时候特别高效,带有其他条件的count都需要进行实际的数据访问

    InnoDB

    1.特性

    具有较好的事务支持:支持4个事务隔离级别,支持多版本读

    行级锁定:通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响

    读写阻塞与事务隔离级别相关

    具有非常高效的缓存特性:能缓存索引,也能缓存数据

    整个表和主键以Cluster方式存储,组成一颗平衡树

    所有Secondary Index都会保存主键信息

    2.适用场景

    需要事务支持(具有较好的事务特性)

    行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成

    数据更新较为频繁的场景

    数据一致性要求较高

    硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽可能减少磁盘 IO

    3.最佳实践

    主键尽可能小,避免给Secondary index带来过大的空间负担

    避免全表扫描,因为会使用表锁

    尽可能缓存所有的索引和数据,提高响应速度

    在大批量小插入的时候,尽量自己控制事务而不要使用autocommit自动提交

    合理设置innodb_flush_log_at_trx_commit参数值,不要过度追求安全性

    避免主键更新,因为这会带来大量的数据移动

    NDBCluster

    1.特性

    分布式:分布式存储引擎,可以由多个NDBCluster存储引擎组成集群分别存放整体数据的一部分

    支持事务:和Innodb一样,支持事务

    可与mysqld不在一台主机:可以和mysqld分开存在于独立的主机上,然后通过网络和mysqld通信交互

    内存需求量巨大:新版本索引以及被索引的数据必须存放在内存中,老版本所有数据和索引必须存在与内存中

    2.适用场景

    具有非常高的并发需求

    对单个请求的响应并不是非常的critical

    查询简单,过滤条件较为固定,每次请求数据量较少,又不希望自己进行水平Sharding

    3.最佳实践

    尽可能让查询简单,避免数据的跨节点传输

    尽可能满足SQL节点的计算性能,大一点的集群SQL节点会明显多余Data节点

    在各节点之间尽可能使用万兆网络环境互联,以减少数据在网络层传输过程中的延时

    4. 它的限制

    4.1 不支持临时表。

    4.2 不支持基于TEXT and BLOB 字段的索引。

    相关文章

      网友评论

          本文标题:mysql的各种引擎

          本文链接:https://www.haomeiwen.com/subject/eopivxtx.html