
已解决问题
谷歌ofhyb556用户在2016.04.20提交了关于“牧马人MySQL**库三种常用存储引擎特性对比”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-01-19T03:58:52。希望大家能够帮助她。详细问题描述及疑问:期待您的答案,希望你能感受到,我最真诚的谢意 !
详细问题描述及疑问:期待您的答案,希望你能感受到,我最真诚的谢意 !
MySQL的存储引擎可能是
由于各存储引
MyISAM
特性
不支持事务:MyISA
表级锁定:其锁定机制是表级索引,这
读写互相阻塞:不
只会缓存索
适用场景
不需要事
并发相对较低(锁定机制问题)
数
以读为主
**一致
最佳实践
尽量索引(缓存
调整读写优先级,根据实际需
启用延迟插入改善大批量写入性能
尽量顺序操作让insert**都写入到尾部,减少阻塞
分解大的操作,降低
降低并发数,某些
对于相对静态的**,充分利用
MyISAM的Count只有在全表扫描的时候特别高效,带有其他条件的count都需要进行实际的**访问
InnoDB
特性
具有较好的事务支持:支持4个事务
行级锁定:通过索引实现,全
读写阻
具有非常高效的缓存
整个表和主键以Cluster方式存储,组成一颗平衡树
所有SecondaryIndex都会保存主键信息
适用场景
行级锁定对高并发有很好的适应能力,但需要确保查
**更新较为频繁的场景
硬件设备内存较大,可以利用InnoDB较好的缓存能力来
最佳实践
主键尽可能小,避免给Secondaryindex带来过大的空间负担
避免全表扫描,因为会使用表锁
尽可能
在大批量小插入的时候,
合理设置innodb_f
避免主键更新,因为这会带来大量的**移动
NDBCluster
特性
分布式:分布式存储引擎,可以由多个NDBCluster存储引擎组成集群分别存放整体**的一部分
支持事务:和Innodb一样,支持事务
可与mysqld不在一台主机:可以和mysqld分开存在于独立的主机上,然后通过网络和mysqld通信交互
内存需求量巨大:新版本索引以及被索引的**必须存放在内存中,老版本所有**和索引必须存在与内存中
适用场景
具有非常高的并发需求
对单个请求的响应并不是非常的critical
查询简单,过滤条件较为固定,每次请求**量较少,又不希望自己进行水平Sharding
最佳实践
尽可能让查询简单,避免**的跨节点传输
尽可能满足SQL节点的计算性能,大一点的集群SQL节点会明显多余Data节点
在各节点之间尽可能使用万兆网络环境互联,以减少**在网络层传输过程中的延时
注:以上三个存储引擎是目前相对主流的存储引擎,还有其他类似如:Memory,Merge,CSV,Archive等存储引擎的使用场景都相对较少,这里就不一一分析了。