为什么索引无法全部装入内存?假设使用树结构组织索引,简单估算一下:
假设单个索引节点12B,1000w个数据行,unique索引,则叶子节点共占约100MB,整棵树最多200MB。
假设一行数据占用200B,则数据共占约2G。
假设索引存储在内存中。也就是说,每在物理盘上保存2G的数据,就要占用200MB的内存,
索引:数据的占用比
约为1/10
。1/10的占用比算不算大呢?物理盘比内存廉价的多,以一台内存16G硬盘1T的服务器为例,
如果要存满1T的硬盘,至少需要100G的内存
,远大于16G。
考虑到一个表上可能有多个索引、联合索引、数据行占用更小等情况,实际的占用比通常大于1/10,某些时候能达到1/3。
在基于索引的存储架构中,
索引:数据的占用比
过高,因此,索引无法全部装入内存
。
从B树、B+树、B*树谈到R 树
的“6、B树的插入、删除操作”小节,B+树的增删同理。此处暂不赘述。
从B树、B+树、B*树谈到R 树
MySQL索引原理及慢查询优化