MongoDB 基础系列十六:增删查改 CRUD Concepts 之 Query Plan

前言

此篇博文是 Mongdb 基础系列之一;

本文只是对 Query Plan 做基础性的讲解;

本文为作者的原创作品,转载需注明出处;

简介

MongoDB 查询优化器在执行查询的时候,根据索引,选择出最优的 Query Plan;当且仅当某个查询有多个可行的查询方案的时候,MongoDB 才会为该查询缓存 Query Plan;

当查询的时候,MongoDB 会从 query planner cache 中查找是否有与该查询匹配的查询形状( query shape ),(补充,什么是查询形状?用 SQL 来类比,类似于 select * from where a=<?> and b=<?>,但不考虑具体的参数值,这就是 query shape;),如果在查询过程中,没有任何的 cache entries 命中,那么 query planner 会通过在试验的阶段生成一些 query plan 的候选者;然后 query planner 会从这些候选者中选择出优胜者,然后将其缓存,最后通过该 query plan 来进行查询并返回相应的 documents;

如果 cache 命中,query planner 并不会理解将其用于查询,而是也会通过 replanning 的机制来评估它的性能,如果性能不达标,会被淘汰出局;如果是需要被淘汰,在通过重新评估,选出最优的 query plan 后选者,然后缓存,最后执行;

上述的流程可以用下面的流程图来表示;