为什么索引无法全部装入内存

首页 / 后端 adolph 9月前 ⋅ 83 阅读

MySQL的MyISAM、InnoDB引擎默认均使用B+树索引(查询时都显示为“BTREE”)。

索引结构的选择基于这样一个性质:大数据量时,索引无法全部装入内存

为什么索引无法全部装入内存?假设使用树结构组织索引,简单估算一下:

  • 假设单个索引节点12B,1000w个数据行,unique索引,则叶子节点共占约100MB,整棵树最多200MB。
  • 假设一行数据占用200B,则数据共占约2G。

假设索引存储在内存中。也就是说,每在物理盘上保存2G的数据,就要占用200MB的内存,索引:数据的占用比约为1/10。1/10的占用比算不算大呢?物理盘比内存廉价的多,以一台内存16G硬盘1T的服务器为例,如果要存满1T的硬盘,至少需要100G的内存,远大于16G。

考虑到一个表上可能有多个索引、联合索引、数据行占用更小等情况,实际的占用比通常大于1/10,某些时候能达到1/3。在基于索引的存储架构中,索引:数据的占用比过高,因此,索引无法全部装入内存

https://monkeysayhi.github.io/2018/03/06/%E6%B5%85%E8%B0%88MySQL%E7%9A%84B%E6%A0%91%E7%B4%A2%E5%BC%95%E4%B8%8E%E7%B4%A2%E5%BC%95%E4%BC%98%E5%8C%96/

全部评论: 0