数据库存储引擎是数据库的底层软件组织。数据库管理系统(DBMS)使用数据引擎来创建、查询、更新和删除数据。不同的存储引擎...存储引擎数据库存储引擎:是数据库的底层软件组织,数据库管理系统(DBMS)使用数据引擎来创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技术、锁定级别等功能,使用不同的存储引擎也可以获得特定的功能。许多不同的数据库管理系统现在支持许多不同的数据引擎。MySql的核心是插件式存储引擎。查看存储引擎SHOWENGINES命令查看MySQL使用的引擎。命令的输出结果为(我用的是NavicatPremium):可见MySQL为用户提供了很多存储引擎,包括处理事务安全表的引擎和非事物安全表的引擎。如果想查看数据库默认使用哪个引擎,可以使用命令:SHOWVARIABLELIKE'storage_engine';在MySQL中,你不需要在整个服务器中使用同一个存储引擎。对于特定的需求,您可以为每个表引擎使用不同的存储。Support列的值表示某个引擎是否可以使用:YES表示可以使用,NO表示不可以使用,DEFAULT表示该引擎是当前默认的存储引擎。让我们来看看一些常用的引擎。InnoDB存储引擎(推荐)InnoDB是事务数据库的首选引擎。它支持事务安全表(ACID)、行锁定和外键。如上图所示,InnoDB是默认的MySQL引擎。InnoDB的主要特性为MySQL提供了具有提交、回滚和崩溃恢复功能的事务安全(ACID兼容)存储引擎。InnoDB在行级别锁定,并且还在SELECT语句中提供类似Oracle的非锁定读取。这些功能提高了多用户部署和性能。在SQL查询中,您可以自由地将InnoDB表与其他MySQL表类型混合使用,即使在同一个查询中也是如此。InnoDB存储引擎维护自己的缓冲池,用于在主内存中缓存数据和索引。.InnoDB在逻辑表空间中组织其表和索引,该表空间可以包含多个文件(或原始磁盘文件)。这不同于MyISAM表,例如,其中每个表都存储在一个单独的文件中。InnoDB表可以是任何大小。即使在文件大小限制为2GB的操作系统上,InnoDB也支持外键完整性约束。在表中存储数据时,每张表都是按照主键的顺序存储的。如果表中没有显示定义时指定主键,InnoDB会为每一行生成一个6字节的ROWID,并以此作为主键使用InnoDB存储引擎MySQL会创建一个10MB的自动扩展数据文件,命名为ibdata1在数据目录中,以及两个名为ib_logfile0和ib_logfile1的5MB日志文件MyISAM存储引擎MyISAM是基于ISAM存储引擎并对其进行了扩展。它是Web、数据仓库和其他应用环境中最常用的存储引擎之一。MyISAM具有很高的插入和查询速度,但不支持事务。MyISAM的主要特性:受大型文件系统和操作系统的支持动态大小的行在将删除与更新和插入操作混合时产生较少的碎片。这是通过合并相邻的已删除块自动完成的。如果下一个块被删除,它会自动扩展到下一个块。每个MyISAM表的最大索引数为64,可以通过重新编译更改。每个索引的列数***为16***键的长度为1000字节,这个也可以通过编译来改变,对于键长度超过250字节的情况,将使用长于1024字节的键BLOB并且TEXT列可以被索引索引列中允许NULL,这个值每个键占用0~1个字节所有数字键值都以高字节在前存储以允许更高的索引压缩每个MyISAM类型表都有一个内部列AUTOINCREMENT,在INSERT和UPDATE操作时更新,AUTOINCREMENT列会同时刷新。因此,MyISAM类型表的AUTOINCREMENT列的更新比InnoDB类型的AUTOINCREMENT类型要快。数据文件和索引文件可以放在不同的目录下。每个字符列可以有不同的字符集。VARCHAR表可以有固定或动态的记录长度。VARCHAR和VARCHARCHAR列最大可达64KB使用MyISAM引擎创建数据库,会生成3个文件。文件名以表名开头,扩展名处的文件类型:frm文件存放表定义,数据文件的扩展名为.MYD(MYData),索引文件的扩展名为.MYI(MYIndex)MEMORY存储引擎MEMORY存储引擎表中的数据存储在内存中,不查询和引用其他表中的数据,提供快速访问。MEMORY的主要特点:MEMORY表的每张表最多可以有32个索引,每个索引有16列,最大键长度为500字节。唯一键值MEMORY表使用固定记录长度格式MEMORY不支持BLOB或TEXT列MEMORY支持AUTO_INCREMENT列和可以包含NULL值的列上的索引MEMORY表在所有客户端之间共享(就像任何其他非TEMPORARYtable)MEMORY表内存存放在内存中。内存由MEMORY表和服务器在查询处理期间创建的内部表共享。当不再需要MEMORY表的内容时,应该释放MEMORY表使用的内存。执行DELETEFROM或TRUNCATETABLE,或删除整个表(使用DROPTABLE)存储引擎选择在实际工作中,选择合适的存储引擎是一个比较复杂的问题。每种存储引擎都有自己的优点和缺点,不能一概而论地说哪个好。但建议选择使用InnoDBInnoDB:支持事务处理,支持外键,支持崩溃恢复能力和并发控制。如果需要对事务完整性有比较高的要求(比如银行),需要并发控制(比如售票),那么选择InnoDB有很大的优势。如果你需要更新和删除频繁的数据库,你也可以选择InnoDB,因为它支持事务提交和回滚。MyISAM:快速数据插入,低空间和内存使用。如果表主要用于插入新记录和读取记录,那么选择MyISAM可以达到很高的处理效率。如果应用程序的完整性和并发性要求比较低,也可以使用它。MEMORY:所有数据都在内存中,数据处理速度快,但安全性不高。如果您需要较快的读写速度,对数据安全性要求不高,可以选择MEMOEY。它对表的大小有要求,不能创建太大的表。因此,这种类型的数据库只用在比较小的数据库表中。注意:同一个数据库也可以使用多个存储引擎的表。如果一张表对事务处理要求比较高,可以选择InnoDB。在该数据库中,查询要求高的表可以存储在MyISAM中。如果数据库需要临时表进行查询,可以选择MEMORY存储引擎。
