MySQL常用存储引擎比较
Posted 若甘年后
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL常用存储引擎比较相关的知识,希望对你有一定的参考价值。
一:MyISAM
应用范围比较小。表级别的锁限制了读/写的性能,因此适用于在web和数据仓库配置中。它通常用于只读或者以写为主的工作。
特点:
- 支持表级别的锁(插入和更新会锁表),不支持事务。
- 拥有较高的插入(insert)和查询(select)速度。
- 存储了行数(count速度更快,怎么向数据库中快速插入100万条数据?我们可以先用MyISAM插入数据,然后修改存储引擎为InnoDB的操作)。
- 只适合于只读之类的数据分析项目(委贷系统的从库,供大数据抽数和跑批统计)
二:InnoDB
InnoDB两个数据文件,mysql5.7中默认的存储引擎。InnoDB是一个事务安全(与ACID兼容)的MySQL存储引擎,它具有提交、回滚和崩溃恢复功能保护用户数据。InnoDB支持行级别锁(不升级为粗粒度的锁)和Oracle风格一致非锁读提高了用户并发性能。InnoDB将用户数据存储在聚集索引中,以减少基于主键的常见查询I/O。为了保持数据完整性,InnoDB还支持外键引用完整性约束。
特点:
- 支持事务,支持外键,因此数据库的完整性、一致性更高。
- 支持行级别的锁和表级别的锁。
- 支持读写并发,写不阻塞读(MVCC)
- 特殊的索引存放方式,可以减少IO,提示查询效率。
- 适合经常更新的表、存在并发读写或者有事务处理的业务系统。
三:Memory
一个文件,将所有数据存储在RAM中,以便在需要快速查找非关键数据的环境中快速访问。这个引擎以前被称为堆引擎。其实用案例正在减少。InnoDB的缓冲池内存区域提供了一种通用、持久的方法将大部分数据保存在内内存中。
特点:
- 把数据放在内存里面,读写速度很快,但是数据库重启或者崩溃数据会全部消失,只适合做临时表。
如何选择存储引擎?
- 如果对数据一致性要求比较高,需要事务支持,可以选择InnoDB。
- 如果查询数据多更新少,对查询性能要求高,可以选择MyISAM。
- 如果需要一个用于查询的临时表,可以选择Memory
- 如果所有的存储引擎都不能满足你的需求,并且你技术能力足够,可以根据官方内部手册用C余元开发一个存储引擎。也就是说,为什么MySQL能支持这么多存储引擎,还能自定义存储引擎,表的存储引擎改了对Server访问没有任何影响,就是大家写存储引擎的时候遵循了MySQL规范,实现了MySQL提供的接口。每个引擎都有自己的服务。这些存储引擎用不用的方式管理数据文件,提供不同的特性,但是为上层提供的接口规范却是相同的。所以存储引擎就支持随意切换。
以上是关于MySQL常用存储引擎比较的主要内容,如果未能解决你的问题,请参考以下文章