上篇文章《MySQL 逻辑结构简介》我们聊到了存储引擎, 可以说 MySQL 可插拔的多元化存储引擎给我们的使用者带来了很灵活的选择.
这篇文章我们来聊一下目前主流的两种存储引擎 MyISAM 和 InnoDB 的区别.
MyISAM | InnoDB | |
外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
锁表 | 表锁,即使操作一条记录也会锁住整个表, 不适合高并发的操作 | 行锁,操作时只锁某一行,不对其它行有影响, 适合高并发的操作 |
缓存 | 只缓存索引,不缓存真实数据 | 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响 |
占用空间 | 表空间占用小 | 表空间占用大 |
关注点 | 性能,查询速度快 | 事务 |
阿里巴巴, 淘宝用哪个?
前期: 阿里巴巴大部分 MySQL 数据库其实使用的是 Percona 的 Xtradb 原型加以修改.
Percona 公司为 MySQL 数据库服务器进行了改进, 新建了一款存储引擎叫 Xtradb, 这款存储引擎从性能上完全可以替代 Innodb, 在功能和性能上较 MySQL 有着很显著的提升,
该版本提升了在高负载情况下的 InnoDB 的性能, 为 DBA 提供一些非常有用的性能诊断工具; 另外有更多的参数和命令来控制服务器行为.
现在: 2016 年云栖大会. 北京峰会上, 阿里云宣布启动了 AliSQL,AliRedis 开源项目, AliSQL 是基于 MySQL 官方版本的一个分支, 由阿里云数据库团队维护, 目前也应用于阿里巴巴集团业务以及阿里云数据库服务.
AliSQL 的出现不仅从其他开源分支比如: Percona,MariaDB,webScaleSQL 等社区汲取精华, 也沉淀了阿里巴巴多年在 MySQL 领域的经验和解决方案. 该版本在社区版的基础上做了大量的性能与功能的优化改进, 尤其适合电商, 云计算以及金融等行业环境, 针对电商秒杀场景, AliSQL 有着特殊的优化,"在通用基准测试场景下, AliSQL 版本比 MySQL 官方版本有着 70% 的性能提升, 在秒杀场景下, 性能提升 100 倍", 可帮助中小企业和开发者提升数据运营能力.
总结:
通常在企业中, 我们会使用 InnoDB 存储引擎, 因为它支持事务, 支持行锁, 高并发处理性能更好, CPU 及内存缓存页优化使得资源利用率更高.
对于那种只需要较高的查询速度, 没有什么其它特殊要求的, 可以选择 MyISAM 存储引擎.
但是需注意:
MyISAM 存储引擎 B-tree 索引有一个很大的限制: 参与一个索引的所有字段的长度之和不能超过 1000 字节. 另外 MyISAM 数据和索引是分开, 而 InnoDB 的数据存储是按聚簇 (cluster) 索引有序排列的, 主键是默认的聚簇 (cluster) 索引, 因此 MyISAM 虽然在一般情况下, 查询性能比 InnoDB 高, 但 InnoDB 的以主键为条件的查询性能是非常高的.
来源: https://www.cnblogs.com/xmyjcs/p/11793186.html