首页 > 编程知识 正文

mysql几种存储引擎,各个数据库的区别

时间:2023-05-05 02:07:13 阅读:32251 作者:4617

**

MyISAM存储引擎**

MyISAM基于ISAM存储引擎并得到扩展。 它是Web、数据仓库和其他APP应用程序环境中最常用的存储引擎之一。 MyISAM有很高的插入、查询速度,但不支持事务

MyISAM的主要特性包括:

1、支持大文件的文件系统和操作系统支持大文件(文件长度可达63位)。

2 .将删除、更新和插入操作混合使用可减少动态大小的行碎片。 这可以通过合并相邻的已删除的块,并在删除下一个块后将其扩展到下一个块来自动完成。

3、每个MyISAM表的最大索引数为64,这可以通过重新编译进行更改。 每个索引的最大列数为16

4、NULL被允许用于索引中的列,该值占每个键的0到1个字节

5、数据文件和索引文件可以放在不同的目录中(InnoDB放在一个目录中)。

MyISAM引擎使用B+Tree作为索引结构,为叶节点的data域存放的是数据记录的地址。 下图是MyISAM索引的原理图。

这里假设表共有三列。 假设Col1是主键,则上图是MyISAM表的“主索引”(Primary key )图像。 在MyISAM的索引文件仅仅保存数据记录的地址MyISAM中,主索引和次索引(Secondary key )没有结构上的差异。 但是,key在主索引中必须是唯一的,并且次索引中的key可以重复。 如果在Col2中创建了辅助索引,则该索引的结构如下图所示。

同样是B+Tree,data域保存数据记录的地址。 因此,MyISAM中索引检索的算法为首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据记录。

MyISAM的索引方法也称为“非聚合”,但这样做是为了区别于InnoDB的聚合索引。

InnoDB存储引擎InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID ),支持行锁定和http://www 如上图所示,为http://ww .

InnoDB的主要特性如下:

1、InnoDB为MySQL提供具有提交、回滚、崩溃恢复能力的事物安全(ACID兼容)存储引擎。 InnoDB在行级锁定,未锁定的读取(如Oracle )也在SELECT语句中提供。 这些功能可以提高多用户部署和性能。 在SQL查询中,可以自由混合使用InnoDB类型的表和其他MySQL的表类型,也可以混合使用同一查询

2、InnoDB是为外键的最大性能而设计的。 CPU效率可能无法与其他基于磁盘的关系数据库引擎锁相媲美

3、InnoDB存储引擎与MySQL服务器完全集成,InnoDB存储引擎维护自己的缓冲池以在主内存中缓存数据和索引。InnoDB是默认的MySQL引擎这与MyISAM表不同,例如处理巨大数据量InnoDB表可以是文件大小限制为2GB的操作系统,也可以是任何大小

4、InnoDB将它的表和索引在一个逻辑表空间中存储表数据时,各表的存储按主键顺序存储。 如果在定义表时未指定主键,InnoDB将为每行生成6字节的ROWID,并将其作为主键。

InnoDB也使用b树作为索引结构,但具体实现方式与MyISAM完全不同。 鉴于MyISAM表中每个表被存放在分离的文件中或更高版本,InnoDB支持外键完整性约束,索引文件仅存储数据记录的地址。 在InnoDB中,表数据文件本身是按B Tree组织的索引结构,第一个重大区别是InnoDB的数据文件本身就是索引文件由于该索引的key是数据表的主键,因此InnoDB表数据文件本身是主索引

上图显示了InnoDB主索引(也是数据文件)的图像,其中叶节点包含完整的数据记录。MyISAM索引文件和数据文件是分离的InnoDB中的数据文件本身是按主键汇总的,因此如果未明确指定该索引(可以没有myisam ),则返回MySQL 此字段

这棵树的叶节点data域保存了完整的数据记录

不是地址。换句话说,InnoDB的所有辅助索引都引用主键作为data域。例如,下图为定义在Col3上的一个辅助索引:

**
这里以英文字符的ASCII码作为比较准则。聚集索引这种实现方式使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录
了 解不同存储引擎的索引实现方式对于正确使用和优化索引都非常有帮助,例如知道了InnoDB的索引实现后,就很容易明白为什么不建议使用过长的字段作为 主键,因为所有辅助索引都引用主索引,过长的主索引会令辅助索引变得过大。再例如,用非单调的字段作为主键在InnoDB中不是个好主意,因为 InnoDB数据文件本身是一颗B+Tree,非单调的主键会造成在插入新记录时数据文件为了维持B+Tree的特性而频繁的分裂调整,十分低效,而使用 自增字段作为主键则是一个很好的选择。

MEMORY存储引擎

**
MEMORY存储引擎将表中的数据存储到内存中,未查询和引用其他表数据提供快速访问。

MEMORY主要特性有:
1、MEMORY表的每个表可以有多达32个索引,每个索引16列,以及500字节的最大键长度
2、MEMORY存储引擎执行HASH和BTREE缩影
3、可以在一个MEMORY表中有非唯一键值
4、MEMORY表使用一个固定的记录长度格式
5、MEMORY不支持BLOB或TEXT列
6、MEMORY支持AUTO_INCREMENT列和对可包含NULL值的列的索引
7、MEMORY表在所由客户端之间共享(就像其他任何非TEMPORARY表)
8、MEMORY表内存被存储在内存中,内存是MEMORY表和服务器在查询处理时的空闲中,创建的内部表共享
9、当不再需要MEMORY表的内容时,要释放被MEMORY表使用的内存,应该执行DELETE FROM或TRUNCATE TABLE,或者删除整个表(使用DROP TABLE)

Archive存储引擎 存储引擎的选择

不同的存储引擎都有各自的特点,以适应不同的需求,如下表所示:

InnoDB :如果要提供提交、回滚、崩溃恢复能力的事务安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个好的选择

InnoDB 和 MyISAM之间的区别:
1>.InnoDB支持事物,而MyISAM不支持事物

2>.InnoDB支持行级锁,而MyISAM支持表级锁

3>.InnoDB支持MVCC, 而MyISAM不支持

4>.InnoDB支持外键,而MyISAM不支持

5>.InnoDB不支持全文索引,而MyISAM支持。(X)

MyISAM:如果数据表主要用来插入和查询记录,则MyISAM(但是不支持事务)引擎能提供较高的处理效率

Memory:如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果。数据的处理速度很快但是安全性不高。

Archive:如果只有INSERT和SELECT操作,可以选择Archive,Archive支持高并发的插入操作,但是本身不是事务安全的。Archive非常适合存储归档数据,如记录日志信息可以使用Archive

使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。