mysql所有引擎级特点_Mysql各种存储引擎的特性以及如何选择存储引擎

MySQL中的数据用各种不同的技术存储在文件(或内存)中,这些技术中的每一种技术都使用不同的存储机制,索引技巧,锁定水平并且最终提供广泛的不同功能和能力。在MySQL中将这些不同的技术及配套的相关功能称为存储引擎。

MySQL的存储引擎可能是所有关系型数据库产品中最具有特色的了,不仅可以同时使用多种存储引擎,而且每种存储引擎和MySQL之间使用插件方式这种非常松的耦合关系。

由于各存储引擎功能特性差异较大,这篇文章主要是介绍如何来选择合适的存储引擎来应对不同的业务场景。

MyISAM

特性

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

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

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

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

适用场景

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

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

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

以读为主

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

最佳实践

尽量索引(缓存机制)

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

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

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

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

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

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

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

InnoDB

特性

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

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

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

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

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

所有SecondaryIndex都会保存主键信息

适用场景

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

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

数据更新较为频繁的场景

数据一致性要求较高

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

最佳实践

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

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

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

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

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

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

MEMORY

使用MySQLMemory存储引擎的出发点是速度。为得到最快的响应时间,采用的逻辑存储介质是系统内存。虽然在内存中存储表数据确实会提供很高的性能,但当mysqld守护进程崩溃时,所有的Memory数据都会丢失。获得速度的同时也带来了一些缺陷。它要求存储在Memory数据表里的数据使用的是长度不变的格式,这意味着不能使用BLOB和TEXT这样的长度可变的数据类型,VARCHAR是一种长度可变的类型,但因为它在MySQL内部当做长度固定不变的CHAR类型,所以可以使用。

一般在以下几种情况下使用Memory存储引擎:

1.目标数据较小,而且被非常频繁地访问。在内存中存放数据,所以会造成内存的使用,可以通过参数max_heap_table_size控制Memory表的大小,设置此参数,就可以限制Memory表的最大大小。

2.如果数据是临时的,而且要求必须立即可用,那么就可以存放在内存表中。

3.存储在Memory表中的数据如果突然丢失,不会对应用服务产生实质的负面影响。

ARCHIVE

Archive是归档的意思,在归档之后很多的高级功能就不再支持了,仅仅支持最基本的插入和查询两种功能。在MySQL5.5版以前,Archive是不支持索引,但是在MySQL5.5以后的版本中就开始支持索引了。Archive拥有很好的压缩机制,它使用zlib压缩库,在记录被请求时会实时压缩,所以它经常被用来当做仓库使用。

几个常用存储引擎的特点

5e7014050a1186f016a146cc0dac1fd4.png

最常使用的2种存储引擎:

Myisam是Mysql的默认存储引擎。当create创建新表时,未指定新表的存储引擎时,默认使用Myisam。每个MyISAM在磁盘上存储成三个文件。文件名都和表名相同,扩展名分别是.frm(存储表定义)、.MYD(MYData,存储数据)、.MYI(MYIndex,存储索引)。数据文件和索引文件可以放置在不同的目录,平均分布io,获得更快的速度。

InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比Myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。

如何选择合适的存储引擎

选择标准:根据应用特点选择合适的存储引擎,对于复杂的应用系统可以根据实际情况选择多种存储引擎进行组合。

下面是常用存储引擎的适用环境:

MyISAM:默认的MySQL插件式存储引擎,它是在web、数据仓储和其他应用环境下最常使用的存储引擎之一

InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。

Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。

Merge:允许MySQLDBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。

小编结语:

这篇文章总结了几种比较常用的存储引擎,对于实际的工作,需要根据具体的情况而定,结合实际的项目实例进行应用,才是最好的学习方法。

更多内容尽在课课家教育!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL所有支持的存储引擎包括: 1. InnoDB:这是MySQL的默认存储引擎。它支持事务、行级锁和外键等特性。 2. MyISAM:这是MySQL中较早的存储引擎之一。它不支持事务和行级锁,但是具有高性能和压缩特性。 3. Memory:这个存储引擎将所有数据存储在内存中,因此速度非常快。但是,数据不会持久化,这意味着在重启服务器后,数据将会丢失。 4. CSV:这个存储引擎将数据存储在逗号分隔的文件中。它对于导入和导出数据非常方便,但不支持索引和事务等功能。 5. Blackhole:这个存储引擎不会实际存储数据,它只是将写入的数据转发到其他MySQL服务器上。因此,它适用于日志记录和数据分发等应用场景。 6. Merge:这个存储引擎允许将多个MyISAM表合并成一个虚拟表,使查询变得更加方便。 7. Federated:这个存储引擎允许将数据存储在远程服务器上,而在本地服务器上查询数据,使得数据分布式管理变得更加容易。 除此之外,还有一些其他的存储引擎,如Archive、Example、NDB Cluster、Partition等。不同的存储引擎具有不同的特点和应用场景,开发者可以根据实际需求选择适合的存储引擎。 ### 回答2: MySQL是一款常见的关系型数据库管理系统,提供了多种存储引擎供用户选择。以下是MySQL中常见的几种存储引擎: 1. InnoDB引擎:InnoDB是MySQL的默认存储引擎,支持事务处理和行级锁定。它具有高度的可靠性和稳定性,支持崩溃恢复和多版本并发控制(MVCC)等特性。 2. MyISAM引擎:MyISAM是MySQL最早的存储引擎,它支持全文索引和表级锁定,但不支持事务处理。它在读操作上性能较好,适用于读多写少的场景。 3. Memory引擎:Memory引擎将数据存储在内存中,因此读写速度非常快,适用于对速度要求较高的应用。但它的数据是临时存储的,当数据库关闭时数据会丢失。 4. Archive引擎:Archive引擎适用于大量历史数据的存储,它具有高度的压缩比和快速的插入速度,但不支持更新和删除操作。 5. CSV引擎:CSV引擎以纯文本形式存储数据,采用逗号分隔值的格式。它对于导入和导出数据非常方便,但不支持索引、事务等功能。 6. Blackhole引擎:Blackhole引擎不会实际存储数据,它只接受写操作并将数据丢弃。这在复制和分发数据时非常有用。 除了以上几种常见的存储引擎外,MySQL还提供了其他一些存储引擎,如FederatedX引擎、Merge引擎等,它们具有各自的特点和适用场景。根据实际需求,用户可以选择合适的存储引擎来优化数据库的性能和功能。 ### 回答3: MySQL是一个关系型数据库管理系统,内部提供了多种存储引擎来支持数据存储和查询。以下是MySQL的一些常见存储引擎: 1. InnoDB:这是MySQL默认的存储引擎,也是最常用的引擎之一。它支持事务、行级锁定和外键约束等功能,适用于大部分的应用场景。 2. MyISAM:这是另一种常见的存储引擎,主要用于读密集型的应用。它不支持事务和行级锁定,但它的查询性能很高。 3. Memory:这个存储引擎将数据存储在内存中,速度非常快,但数据不会持久化。适用于缓存和临时数据存储。 4. Archive:这个存储引擎用于高度压缩的只读数据。它对于大量历史数据的存储非常有效,但写入和查询速度较慢。 5. CSV:这个存储引擎将数据存储为逗号分隔值文件,适用于导入和导出数据。 6. Blackhole:这个存储引擎直接丢弃所有写入数据,对于备份和复制很有用。 7. NDB:这是一个高度可扩展的存储引擎,适用于分布式数据库和高并发应用。 8. Federated:这个存储引擎可以将数据保存在远程服务器上,允许在多个数据库之间共享数据。 以上列出的存储引擎只是MySQL提供的一部分,每个存储引擎都有自己的特性和适用场景。选择合适的存储引擎取决于应用的需求和性能要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值