mysql存储引擎比较

来源:互联网 发布:java关闭线程的方法 编辑:程序博客网 时间:2024/04/30 15:41

数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建,查询,更新,和删除数据操作。不同的存储引擎提供不同的存储引擎机制,索引技巧,锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能,现在许多不同的数据库管理系统都支持多种不同的数据引擎,mysql的核心就是存储引擎。
存储引擎比较

InnoD引擎
InnoDB是事务型数据库的首选引擎,支持事务安全表,支持行锁定和外键。MySQL5.5.5之后,InnDB作为默认存储引擎,主要特性
1. InnoDB给MySQL提供 了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非 锁定读。这些特色增加 了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。
2.InnoDB是为处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。
3.InnoDB存储引擎被完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。 InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与MyISAM表不同,比如在MyISAM表中每个表被存在 分离的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上。
4.InnoDB支持外键完整性约束
存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显示在表定义时指定主键InnoDB会为每一行生成一个6b的ROWID,并以此作为主键。
5.InnoDB被用来在众多需要高性能的大型数据库站点上产生。

MyISAM存储引擎
MyISAM基于ISAM存储引擎,并对其进行扩展。它是在web,数据仓储,和其它应用环境下最常用的存储引擎,它拥有较高的插入,查询速度,但不支持事务,在5.5,5之前的版本中,MyISAM是默认引擎。

●所有数据值先存储低字节。这使得数据机和操作系统分离。二进制轻便性的唯一要求是机器使用补码(如最近20年的机器有的一样)和IEEE浮点格式(在主流机器中也完全是主导的)。唯一不支持二进制兼容性的机器是嵌入式系统。这些系统有时使用特殊的处理器。
●先存储数据低字节并不严重地影响速度;数据行中的字节一般是未联合的,从一个方向读未联合的字节并不比从反向读更占用更多的资源。服务器上的获取列值的代码与其它代码相比并不显得时间紧。
●大文件(达63位文件长度)在支持大文件的文件系统和操作系统上被支持。
●当把删除和更新及插入混合的时候,动态尺寸的行更少碎片。这要通过合并相邻被删除的块,以及若下一个块被删除,就扩展到下一块来自动完成。
●每个MyISAM表最大索引数是64。 这可以通过重新编译来改变。每个索引最大的列数是16个。
●最大的键长度是1000字节。这也可以通过编译来改变。对于键长度超过250字节的情况,一个超过1024字节的的键块被用上。
●BLOB和TEXT列可以被索引。
●NULL值被允许在索引的列中。这个占每个键的0-1个字节。
●所有数字键值以高字节为先被存储以允许一个更高地索引压缩。
●当记录以排好序的顺序插入(就像你使用一个AUTO_INCREMENT列之时),索引树被劈开以便高节点仅包含一个键。这改善了索引树的空间利用率。
●每表一个AUTO_INCREMEN列的内部处理。MyISAM为INSERT和UPDATE操作自动更新这一 列。这使得AUTO_INCREMENT列更快(至少10%)。在序列顶的值被删除之后就不能再利用。(当AUTO_INCREMENT列被定义为多列索 引的最后一列,可以出现重使用从序列顶部删除的值的情况 )。AUTO_INCREMENT值可用ALTER TABLE或myisamch来重置。
●如果数据文件中间的表没有自由块了,在其它线程从表读的同时,你可以INSERT新行到表中。(这被认识为并发操作 )。自由块的出现是作为删除行的结果,或者是用比当前内容多的数据对动态长度行更新的结果。当所有自由块被用完(填满),未来的插入又变成并发。
●你可以把数据文件和索引文件放在不同目录,用DATA DIRECTORY和INDEX DIRECTORY选项CREATE TABLE以获得更高的速度,请参阅13.1.5节,“CREATE TABLE语法”。
●每个字符列可以又不同的字符集。
●在MyISAM索引文件里又一个标志,它表明表是否被正确关闭。如果用–myisam-recover选项启动mysqld,MyISAM表在打开得时候被自动检查,如果被表被不恰当地关闭,就修复表。
●如果你用–update-state选项运行myisamchk,它标注表为已检查。myisamchk –fast只检查那些没有这个标志的表。
●myisamchk –analyze为部分键存储统计信息,也为整个键存储统计信息。
使用MyISAM引擎创建数据库将产生3个文件 :frm文件存储表定义,数据文件扩展名.MYD,索引文件扩展名。MYI

MEMORY存储引擎
Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。
1.MEMORY表的每个表可以多达32个索引,每个索引16列,以及500B的值。
2.MEMORY存储引擎执行HASHT和BRTEE索引
3.可以在一个MEMORY表中有唯一键
4.MEMOR表使用一个固定的记录长度格式
5.MEMORY不支持BLOB或TEXT列
6.MEMORY表在所有客户端之间共享
7.MEMORY表内容被存在内存中,内存是MEMORY表和服务器在查询处理时的空闲中创建的内部表共享
8.当不要MEMORY表的内容时。要放弃被MEMORY表使用的内存。应该执行DELETE FROM 或TRUNCATE TABLE ,或者删除整个表(使用DROP TABLE);

0 0
原创粉丝点击