MySQL中表的存储引擎如何选择

MySQL默认支持多种存储引擎

🍐多种存储引擎,以适应于不同领域的数据库应用需要,用户可以选择不同的存储引擎提高应用的效率,提供灵活的存储,用户甚至可以按照自己的需要定制和使用自己的存储引擎。

🍐MySQL5.0支持的存储引擎包括MyISAM、InnoDB、MEMORY、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED,其中InnoDB和BDBD提供事务安全表,其他存储引擎都市非事务安全表。

🍐创建新表时如果不指定存储引擎,系统会使用默认存储引擎。MySQL5.5之前的默认存储引擎是MYISAM,5.5之后改为InnoDB。(我的是8.0版,如下图)

创表时对存储引擎的操作

🍐创建表ai(存储引擎为MYISAM),表country(存储引擎为InnoDB):

 🍐使用ALTER TABLE语句,将一个已经存在的表修改成其他的存储引擎。下面的例子介绍了如何将表ai从MyISAM存储引擎修改到InnoDB存储引擎.

 

 

 嗯哼,怎么肥四啊???

 

 

 嗯哼,怎么肥四啊???好迷,暂未解决

 

 常用存储引擎的特性。

 

 

 

🎂MyISAM

🍐不支持事务,也不支持外键。

🍐优势访问速度快,对事务完整性没有要求,以SELECT、INSERT为主的应用基本用这个引擎来创建。

🍐支持三种不同的存储格式分别是:

  • 静态表
  • 动态表(动态表中包含变长字段,记录不是固定长度的,这样存储的优点是占用的空间相对较少,但是频繁地更新和删除记录会产生碎片,需要定期执行OPTIMIZE TABLE语句或myisamchk-r命令来改善性能,并且在出现故障时恢复相对比较困难。)
  • 压缩表(空间小)
  • 注:静态表是默认的存储格式,存储迅速,容易缓存,占空间大。数据存储时混按照列宽补全空格,但在访问时不会得到后面这些空格。特别注意!!!

 

 

 

 

🎂InnoDB

🍐InooDB存储引擎具有提交,回滚,和崩溃恢复能力的事务安全。

 

  • 自动增长列:1.自动增长列可以手动插入,但是如果插入的值为空或者为0,那么实际插入的为自动增长之后的值。2.对于InnoDB表,自动增长列必须是索引。如果是组合索引,也必须是组合索引的第一列,但是对于 MyISAM 表,自动增长列可以是组合索引的其他列,这样插入记录后,自动增长列是按照组合索引的前面几列进行排序后递增的。
  • 1.手动插入示例
  • 2
  •  

  • 外键约束(MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引)
  • 存储方式1.共享表空间存储 2.多表空间存储。(多表空间的表的参数生效后,只对新建的表生效)。

🎂MERGE

MEMORY类型的表访问非常地快,因为它的数据是放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失掉。

MEMORY 类型的存储引擎主要用于那些内容变化不频繁的代码表,或者作为统计操作的中间结果表,便于高效地对中间结果进行分析并得到最终的统计结果。对存储引擎为MEMORY的表进行更新操作要谨慎,因为数据并没有实际写入到磁盘中,所以一定要对下次重新启动服务后如何获得这些修改后的数据有所考虑

 如何选择合适的存储引擎

 🎂MyISAM:默认的MySQL插件式存储引擎。如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常适合的。MyISAM是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。
🎂InnoDB:用于事务处理应用程序,支持外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询以外,还包括很多的更新、删除操作,那么InnoDB存储引擎应该是比较合适的选择。InnoDB存储引擎除了有效地降低由于删除和更新导致的锁定,还可以确保事务的完整提交(Commit)和回滚(Rollback),对于类似计费系统或者财务系统等对数据准确性要求比较高的系统,InnoDB都是合适的选择。
🎂MEMORY:将所有数据保存在 RAM 中,在需要快速定位记录和其他类似数据的环境下,可提供极快的访问。MEMORY 的缺陷是对表的大小有限制,太大的表无法缓存在内存中,其次是要确保表的数据可以恢复,数据库异常终止后表中的数据是可以恢复的。MEMORY表通常用于更新不太频繁的小表,用以快速得到访问结果。
🎂MERGE:用于将一系列等同的MyISAM表以逻辑方式组合在一起,并作为一个对象引用它们。MERGE表的优点在于可以突破对单个MyISAM表大小的限制,并且通过将不同的表分布在多个磁盘上,可以有效地改善MERGE表的访问效率。这对于诸如数据仓储等VLDB环境十分适合。

 

posted @ 2020-04-14 17:48  小嗨皮皮  阅读(757)  评论(0编辑  收藏  举报