个人视频网站制作,网站建设方案书例子,如何让wordpress百度霸屏,设计图制作软件免费下载目录
1、MySQL存储引擎有哪些#xff1f;
2、默认的存储引擎是哪个#xff1f;
3、InnoDB和MyISAM有什么区别吗#xff1f;
3.1、关于事务
3.2、关于行级锁
3.3、关于外键支持
3.4、关于是否支持MVCC
3.5、关于数据安全恢复
3.6、关于索引
3.7、关于性能
4、如何…目录
1、MySQL存储引擎有哪些
2、默认的存储引擎是哪个
3、InnoDB和MyISAM有什么区别吗
3.1、关于事务
3.2、关于行级锁
3.3、关于外键支持
3.4、关于是否支持MVCC
3.5、关于数据安全恢复
3.6、关于索引
3.7、关于性能
4、如何选择MyISAM和InnoDB
5、小结 1、MySQL存储引擎有哪些
MySQL支持多种存储引擎其中最常用的有InnoDB、MyISAM。我们可以通过show engines来查看当前数据库所支持的存储引擎。 2、默认的存储引擎是哪个
使用show engines可以看到默认的存储引擎是InnoDB。其实MySQL 5.5版本之前使用MyISAM作为默认的存储引擎5.5版本之后采用InnoDB作为默认存储引擎。
除了show engines查看存储引擎外还可以show variables like %engine%命令查看MySQL当前默认的存储引擎。 InnoDB存储引擎官方文档MySQL :: MySQL 8.0 Reference Manual :: 17 The InnoDB Storage Engine
3、InnoDB和MyISAM有什么区别吗
首先所有的存储引擎中只有 InnoDB 是事务性存储引擎也就是说只有 InnoDB 支持事务。除了事务属性外还有其他不一样的地方。
3.1、关于事务
InnoDB支持事务MyISAM不提供事务支持。InnoDB 实现了 SQL 标准定义了四个隔离级别具有commit和rollback事务的能力。InnoDB 默认使用的REPEATABLE-READ可重复读隔离级别是可以解决幻读问题发生的。
3.2、关于行级锁
InnoDB支持行级锁和表级锁默认为表级锁。MyISAM只支持表级锁。正是由于MyISAM只支持表级锁因此他在并发时的写性能要远远低于InnoDB。
3.3、关于外键支持
InnoDB大家都知道是支持外键的但MyISAM不支持。外键可以增加数据的约束性保证数据强一致性但是在性能上会有一些损耗。
3.4、关于是否支持MVCC
由于MyISAM不支持行级锁因此肯定不支持MVCCInnoDB采用MVCC来支持高并发并实现了四个标准的隔离级别。默认级别是REPEATABLE-READ可重复读并且通过间隙锁策略防止幻读的出现。
3.5、关于数据安全恢复
借助于redo logInnoDB支持数据安全恢复。即当数据库出现异常崩溃后重新启动时会保证数据库恢复到崩溃前的状态。而MyISAM不支持。
3.6、关于索引
众所周知InnoDB使用的是BTree作为索引结构类似的MyISAM也是使用的BTree。但是InnoDB其数据文件本身就是索引文件。而MyISAM中索引文件和数据文件是分离的其表数据文件本身是按BTree组织的一个索引结构树的叶子节点保存了完整的数据记录。
MyISAM支持全文索引这是一种基于分词创建的索引可以支持复杂的查询。
InnoDB是基于聚簇索引建立的聚簇索引堆逐渐查询有很高的性能不过他的二级索引非主键索引中必须包含主键列所以如果主键很大的话其他的所有索引都会很大。因此如果表上的索引较多主键应该尽可能小。
3.7、关于性能
MyISAM由于引擎设计简单数据以紧密格式进行粗出所以在某些场景下性能很好。但是其典型的问题还是表锁的问题由于不支持行级锁所有的查询都会进行锁表读表时加共享锁写表时加排他锁而长期处于Locked状态。在CPU多核心数的加持下由于InnoDB支持行级锁其并发读写能力呈线性增长。MyISAM不支持并发所以他的处理能力在CPU多核心数下显得心有余力不足。
4、如何选择MyISAM和InnoDB
大多数情况下InnoDB都是正确的选择所以Oracle在MySQL 5.5版本时终于将InnoDB作为默认的存储引擎了。 在《高性能MySQL》一书上提到“除非需要用到某些InnoDB不具备的特性并且没有其他办法可以替代否则都应该优先选择InnoDB引擎”。如要用到全文索引建议优先考虑InnoDB加上Sphinx的组合而不是直接考虑使用支持全文索引的MyISAM。 如果实在不得已需要使用不同的存储引擎最好优先考虑以下几个因素
事务应用是否需要支持事务。如果应用需要支持事务InnoDB则是目前已知的最稳定并且经过验证的选择。如果不需要支持事务且以select和insert操作为那么MyISAM也是不错的选择如日志系统等。备份数据是否需要备份。如果系统坏允许关闭服务进行备份那么这个因素可以忽略。但是如果需要在线热备份则选择InnoDB是基本要求了。崩溃恢复数据较大时系统崩溃后快速恢复是需要考虑的问题。相比之下MyISAM比InnoDB崩溃后发生数据损坏的概率要高很多且恢复速度也要慢很多。特有的特性有时应用可能以来一些粗出引擎所特有的特性或优化。比如应用依赖聚簇索引的优化。但是现实情况是如今项目你几乎找不到任何理由再使用MyISAM来替代InnoDB了。
5、小结
最后总结一下两者的差异
InnoDB支持事务MyISAM不支持事务InnoDB支持行级锁和表锁MyISAM只支持表锁InnoDB支持外键MyISAM不支持InnoDB支持MVCCMyISAM不支持InnoDB支持热备份数据崩溃后恢复MyISAM不支持InnoDB性能比MyISAM高上许多