MongoDB索引是否常驻RAM?索引扫描是否需先从磁盘读取?
MongoDB索引内存驻留与扫描机制解答
问题1:索引是否始终驻留在RAM中?
不是。MongoDB的索引页和数据页一样,由WiredTiger存储引擎的缓存池管理,遵循LRU(最近最少使用)置换规则:
- 当内存缓存空间充足(能容纳所有索引数据)时,只要索引页被加载过,就会一直驻留在RAM中,不会被移出;
- 当内存缓存不足时,不管是索引页还是数据页,都会按照“最近最少使用”的顺序被置换出RAM,为新的页腾出空间;
- MongoDB没有优先保留索引页的特殊机制,索引页和数据页在缓存置换中地位平等,只是索引通常访问频率更高,被淘汰的概率更低。
问题2:因此,扫描索引是否需要先从磁盘检索索引?
不一定:
- 如果要扫描的索引页已经在RAM缓存中,直接从内存读取即可,无需访问磁盘;
- 如果索引页不在RAM缓存中(比如长期未被访问被置换,或者首次访问),则需要先从磁盘将对应的索引页加载到RAM缓存中,再进行扫描。
核心疑问补充说明
在内存空间充足的情况下,只要索引页被加载过一次,就会一直驻留在RAM中,不会因为访问频率低而被移出——LRU置换仅在缓存空间不足时触发。索引和数据遵循相同的缓存管理规则,不存在“优先保留索引”的特殊逻辑,只是索引的访问频率通常高于冷数据,所以更不容易被置换。
内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture
相关产品推荐
相关产品推荐

