Query Explain を使用してクエリの実行を分析する

このページでは、クエリを実行するときにクエリ実行情報を取得する方法について説明しま��。

クエリ Explain を使用する

Query Explain を使用すると、クエリがどのように実行されているかを把握できます。これにより、queriegoogledata/devsite/site-cloud/ja/firestore/mongodb-compatibility/quotas.mds の最適化に役立つ詳細情報が提供されます。現在、Query Explain のサポートは Google Cloud コンソールのみです。

Query Explain を使用するには、クエリエディタでクエリを実行し、[説明] タブを開きます。

Console
  1. Google Cloud コンソールで [データベース] ページに移動します。

    [データベース] に移動

  2. データベースのリストから、MongoDB 互換の Firestore データベースを選択します。 Google Cloud コンソールで、そのデータベースの Firestore Explorer が開きます。
  3. クエリエディタにクエリを入力し、[実行] をクリックします。
  4. [説明] タブをクリックして、クエリ分析の出力を確認します。

    コンソールの [クエリの説明] タブ

分析

クエリの説明の出力には、サマリー統計情報と実行ツリーの 2 つの主要コンポーネントが含まれています。次のクエリを例に考えます。

db.order.aggregate(
 [
   { "$match": { "user_id": 1234 } },
   { "$sort": { "date_placed": 1 } }
 ]
)

概要統計情報

説明の出力の上部には、実行統計の概要が表示されます。これらの統計情報を使用して、クエリのレイテンシまたはコストが高いかどうかを判断します。また、クエリがメモリ上限にどれだけ近づいているかを確認できるメモリ統計情報も含まれています。

Billing Metrics:
read units: 1

Execution Metrics:
request peak memory usage: 4.00 KiB (4,096 B)
results returned: 1

実行ツリー

実行ツリーは、クエリの実行をノードの連続として表します。最下位ノード(リーフノード)は、ツリーを上ってクエリ レスポンスを生成するストレージ レイヤ��らデータを取得します。

各実行ノードの詳細については、実行リファレンスをご覧ください。

この情報を使用してクエリを最適化する方法については、クエリ実行を最適化するをご覧ください。

実行ツリーの例を次に示します。

• Drop
|  fields to drop: [__$3__]
|  records returned: 0
|
└── • MajorSort
    |  fields: [__$3__ ASC]
    |  peak memory usage: 4.00 KiB (4,096 B)
    |  records returned: 0
    |
    └── • Extend
        |  expressions: [date_placed AS __$3__]
        |  records returned: 0
        |
        └── • Drop
            |  fields to drop: [__key__]
            |  records returned: 0
            |
            └── • Extend
                |  expressions: [_id(__key__) AS __id__]
                |  records returned: 0
                |
                └── • Filter
                    |  expression: $eq(user, 1,234)
                    |  records returned: 0
                    |
                    └── • TableScan
                           order: UNDEFINED
                           properties: * - { __create_time__, __update_time__ }
                           records returned: 0
                           records scanned: 0
                           source: (default)#/**/collection

次のステップ