标签:储存 缓存 聚簇 索引 引擎 InnoDB MyISAM MySQL 主键
概述
主要关注 MyISAM 和 InnoDB
对比项 | MyISAM | InnoDB |
---|---|---|
外键 | 不支持 | 支持外键 |
事务 | 不支持 | 支持事务 |
行表锁 | 表级锁,即使操作一条记录也会锁住整张表,不适合高并发操作 | 行级锁,数据更新时只锁某一行,不对其他行有影响,适合高并发操作 注意:数据插入时使用表锁 |
缓存 | 只缓存索引,不缓存真实数据 | 不仅缓存索引还要缓存真实数据,対内存要求较高,而且内存大小対性能有决定性影响 |
表空间 | 小 | 大,分为段->区->页(页大小 16KB) 页读入到内存匹配,读入一条记录和读入一页 (包括很多条记录)的 I/O 时间是一样的 |
关注点 | 性能 | 行级锁,事务,外键,ACID 约束,热备份和容灾,MVCC,聚集索引 |
应用场景 | 处理速度快,适合查询密集,占用空间小 不支持事务等特性,只支持表级锁 |
丰富的特性,高并发,适合更新密集,二次查找,读写效率差,占用空间大 |
InnoDB
InnoDB 使用的存储方式是聚簇索引,每个表有且仅有一个聚簇索引。
聚簇索引指不仅缓存索引还缓存真实数据。InnoDB 默认使用主键顺序 (可自定义索引)为行记录构建一颗 B+ 树。
聚簇索引的存储并不是物理上连续的,而是逻辑上连续的,叶子结点间按照主键顺序排序,通过双向链表连接。
非聚簇索引
也称为二次索引、辅助索引,同样是一棵 B+ 树,通过非聚簇索引查找主键,再通过主键 (作为索引)去聚簇索引内查找行记录。InnoDB 经过二次查找才可定位到行记录。
MyISAM
MyISAM 是顺序存储的,B+ 树叶节点存放的是行记录的物理地址,定位速度快
- 同一数据库不同的表可以使用不同存储引擎,查询密集的表使用 MyISAM,临时表使用 Memory
- 不同服务器的数据库可以使用不同存储引擎,读写分离场景,从数据库可以使用 MyISAM,提高查询速度
标签:储存,缓存,聚簇,索引,引擎,InnoDB,MyISAM,MySQL,主键 来源: https://www.cnblogs.com/luedong/p/16061152.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。