MySQL 选择合适的存储引擎
对于数据库这一块询问比较多的就是在MySQL中怎么去选择一种何时当前业务需求的存储引擎,而MySQL中支持的存储引擎又有很多种,那么MySQL中分别又有那些,怎么优雅的使用呢?
划分引擎原因
在文件系统中,MySQL将每个数据库(也可以称之为schema)保存为数据目录下的一个子目录。创建表时,MySQL会在数据库子目录下创建一个和表同名的.frm文件保存表的定义。例如创建一个名为DebugTable的表,MySQL会在DebugTable.frm文件中保存该表的定义。
因为MySQL使用文件系统的目录和文件来保存数据库和表的定义,大小写敏感性和具体的平台密切相关。在Windows系统中,大小写是不敏感的;而在类Unix系统中则是敏感的。不同的存储引擎保存数据和索引的方式是不同的,但表的定义则是在MySQL服务层wk统一处理的。
查看支持引擎
想了解MySQL中支持的引擎的情况,可以使用如下命令查看:
showengines;
结果如下(MySQL版本:Ver8.0.19):
mysql>showengines; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ |Engine|Support|Comment|Transactions|XA|Savepoints| +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ |FEDERATED|NO|FederatedMySQLstorageengine|NULL|NULL|NULL| |MEMORY|YES|Hashbased,storedinmemory,usefulfortemporarytables|NO|NO|NO| |InnoDB|DEFAULT|Supportstransactions,row-levellocking,andforeignkeys|YES|YES|YES| |PERFORMANCE_SCHEMA|YES|PerformanceSchema|NO|NO|NO| |MyISAM|YES|MyISAMstorageengine|NO|NO|NO| |MRG_MYISAM|YES|CollectionofidenticalMyISAMtables|NO|NO|NO| |BLACKHOLE|YES|/dev/nullstorageengine(anythingyouwritetoitdisappears)|NO|NO|NO| |CSV|YES|CSVstorageengine|NO|NO|NO| |ARCHIVE|YES|Archivestorageengine|NO|NO|NO| +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ 9rowsinset(0.00sec)
存储引擎分类
MySQL存储引擎分类有MyISAM、InnoDB、Memory、Merge等,可以看上面表中列出的支持引擎,但是其中最为常用的就是MyISAM和InnoDB两个引擎,其中针对于以上讲到的存储引擎,如下表进行对比:
MyISAM与InnoDB区别
两种类型最主要的差别是InnoDB支持事务处理与外键和行级锁。
- InnoDB可借由事务日志(TransactionLog)来恢复程序崩溃(crash),或非预期结束所造成的数据错误;而MyISAM遇到错误,必须完整扫描后才能重建索引,或修正未写入硬盘的错误。
- InnoDB的修复时间,一般都是固定的,但MyISAM的修复时间,则与数据量的多寡成正比。
- 相对而言,随着数据量的增加,InnoDB会有较佳的稳定性。
- MyISAM必须依靠操作系统来管理读取与写入的缓存,而InnoDB则是有自己的读写缓存管理机制。(InnoDB不会将被修改的數據頁立即交给操作系统)因此在某些情况下,InnoDB的数据访问会比MyISAM更有效率。
- InnoDB目前并不支持MyISAM所提供的压缩与terserowformats(简洁的行格式),所以对硬盘与高速缓存的使用量较大。
- 当操作完全兼容ACID(事务)时,虽然InnoDB会自动合并数笔连接,但每次有事务产生时,仍至少须写入硬盘一次,因此对于某些硬盘或磁盘阵列,会造成每秒200次的事务处理上限。若希望达到更高的性能且保持事务的完整性,就必使用磁盘缓存与电池备援。当然InnoDB也提供数种对性能冲击较低的模式,但相对的也会降低事务的完整性。而MyISAM则无此问题,但这并非因为它比较先进,这只是因为它不支持事务。
应用场景
- MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
- InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。
以上就是MySQL存储引擎的选择的详细内容,更多关于MySQL存储引擎的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。