バージョン 5.1 で追加。
クエリ結果を検索して返すために、MongoDB は次のいずれかのクエリ エンジンを使用します。
クラシック クエリ エンジン
スロットベースのクエリ実行エンジン。MongoDB 5.1 以降の一部のクエリで使用できます。
スロットベースのクエリ実行エンジンは、「スロットベース」のモデルを使用してクエリの実行中に中間結果の具体化を回避し、より効率的な実行を可能にします。
MongoDBはクエリを実行するためのエンジンを自動的に選択します。 8.0より前のバージョンのMongoDBでは、特定のクエリのエンジンを手動で指定することはできません。 MongoDB 8.0以降では、 クエリ設定 を使用してクエリのエンジンを指定できます。 詳しくは、 setQuerySettingsを参照してください。
MongoDB は、特定の条件が満たされたクエリのサブセットに対して スロットベースのクエリ実行エンジンを 使用できます。 ほとんどの場合、スロットベースの実行エンジンは、従来のクエリ エンジンと比較してパフォーマンスが向上し、CPU とメモリのコストが削減されます。
MongoDB は、スロットベースのクエリ実行エンジンに適していないクエリにはクラシック エンジンを使用します。
スロットベースの実行エンジンに適したクエリ
MongoDB は、クエリごとにスロットベースの実行エンジンを使用するかどうかを判断し、クエリに存在する各演算子と式のサポートを考慮します。 たとえば、スロットベースの実行エンジンを使用する 2 つの一般的なパイプラインは、 $group } ステージまたは$lookupステージで集計されます。 ただし、スロットベースの実行エンジンのサポートはバージョンに固有であり、積極的に変更されます。
クエリがスロットベースの実行エンジンを使用しているかどうかを確認するには、 使用されたクエリ エンジンを決定するセクションを参照してください。
重要
MongoDB は、ハッシュされていないパスのハッシュされたパス プレフィックスを持つインデックスを持つコレクションのスロットベースの実行エンジンを自動的に無効にします。ここでは両方のパスがインデックスに含まれています。
ブロック プロセシング
バージョン8.0以降、 MongoDB は、ブロック処理を使用して特定の時系列クエリを実行する場合があります。 このパフォーマンス向上により、クエリは個々の値ではなく、データの「ブロック」単位で処理されます。 ブロック処理 により、時系列コレクションを操作する際のクエリ実行速度とスループットが向上します。
どのクエリ エンジンが使用されたかを特定する
クエリの実行にクラシック エンジンとスロットベースの実行エンジンのどちらが使用されたかを判断する方法がいくつかあります。
クエリ説明の結果の確認
クエリの explain 結果は、使用されたクエリエンジンによって異なります。 例、スロットベースの実行エンジンを使用して実行されたクエリの explain 結果 には、 explain.queryPlanner.winningPlan.slotBasedPlanフィールドが含まれます。
クエリ エンジン間の explain 結果の違いの詳細については、 explain の出力構造 を参照してください。
スロー クエリ ログの確認
低速オペレーションログメッセージには、クエリを実行したクエリエンジンを示す queryFramework フィールドが含まれます。
queryFramework: "classic"は、クラシック エンジンでクエリが実行されたことを示します。queryFramework: "sbe"はスロットベースのクエリ実行エンジンでクエリが実行されたことを示します。
スロットベースの実行エンジンを使用したクエリのログ メッセージの例については、「低速操作 」を参照してください。