이제 MongoDB 호환성을 갖춘 Cloud Firestore Enterprise 버전을 사용할 수 있습니다.
자세히 알아보기
Query Explain을 사용하여 쿼리 실행 분석
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
Cloud Firestore Enterprise 버전에만 해당합니다.
|
이 페이지에서는 쿼리를 실행할 때 쿼리 실행 정보를 가져오는 방법을 설명합니다.
Query Explain 사용
Query Explain을 사용하여 쿼리가 실행되는 방식을 파악할 수 있습니다.
이를 통해 쿼리를 최적화하는 데 사용할 수 있는 세부정보가 제공됩니다.
Google Cloud 콘솔 또는 explain
명령어를 통해 Query Explain을 사용할 수 있습니다.
콘솔
쿼리 편집기에서 쿼리를 실행하고 설명 탭을 엽니다.
-
Google Cloud 콘솔에서 데이터베이스 페이지로 이동합니다.
데이터베이스로 이동
-
데이터베이스 목록에서 MongoDB 호환성을 갖춘 Cloud Firestore 데이터베이스를 선택합니다.
Google Cloud 콘솔에서 해당 데이터베이스의 Firestore 탐색기가 열립니다.
-
쿼리 편집기에 쿼리를 입력하고 실행을 클릭합니다.
-
설명 탭을 클릭하여 쿼리 분석 출력을 확인합니다.
MongoDB API
MongoDB API의 Query Explain은 Mongo Shell 및 Compass와 같은 도구에서 사용할 수 있는 explain
명령어를 통해 지원됩니다.
explain
명령어는 aggregate
, find
, distinct
, count
명령어와 함께 지원됩니다. 예를 들면 다음과 같습니다.
db.collection.explain.find(...)
explain()
메서드를 사용할 수도 있습니다. 예를 들면 다음과 같습니다.
db.collection.find({QUERY}).explain()
제한사항
다음 제한사항과 차이점에 유의하세요.
-
Query Explain은 커서를 반환하는 명령어를 지원하지 않습니다. 예를 들어 다음 명령어를 직접 호출하여 explain을 호출하는 것은 지원되지 않습니다.
db.collection.aggregate(..., explain: true)
Query Explain은 find
, aggregate
, count
, distinct
명령어에서만 지원됩니다.
-
MongoDB API를 통해 Query Explain의 Verbosity
및 Comment
옵션은 지원되지 않습니다. 이 동작은 executionStats
옵션과 일치합니다. allPlansExecution
및 queryPlanner
옵션은 제공되더라도 무시됩니다.
분석
Query Explain의 출력에는 요약 통계와 실행 트리라는 두 가지 주요 구성요소가 포함됩니다.
다음 쿼리를 예로 들어보겠습니다.
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
실행 트리
실행 트리는 쿼리 실행을 일련의 노드로 설명합니다. 하단 노드(리프 노드)는 스토리지 레이어에서 데이터를 가져오고, 이 데이터는 트리를 따라 올라가 쿼리 응답을 생성합니다.
각 실행 노드에 대한 자세한 내용은 실행 참조를 참조하세요.
이 정보를 사용하여 쿼리를 최적화하는 방법에 대한 자세한 내용은 쿼리 실행 최적화를 참조하세요.
다음은 실행 트리의 예입니다.
• Compute
| $out_1: map_set($record_1, "__id__", $__id___1, "__key__", $__key___1, "__row_id__", $__row_id___1, "__$0__", $__$0___2)
| is query result: true
|
| Execution:
| records returned: 1
|
└── • Compute
| $__$0___2: UNSET
|
| Execution:
| records returned: 1
|
└── • Compute
| $__key___1: UNSET
| $__row_id___1: UNSET
|
| Execution:
| records returned: 1
|
└── • Compute
| $__id___1: _id($record_1.__key__)
|
| Execution:
| records returned: 1
|
└── • MajorSort
| fields: [$v_5 ASC]
| output: [$record_1]
|
| Execution:
| records returned: 1
| peak memory usage: 4.00 KiB (4,096 B)
|
└── • Compute
| $v_5: array_get($v_4, 0L)
|
| Execution:
| records returned: 1
|
└── • Compute
| $v_4: sortPaths(array($record_1.date_placed), [date_placed ASC])
|
| Execution:
| records returned: 1
|
└── • Filter
| expression: $eq($user_id_1, 1,234)
|
| Execution:
| records returned: 1
|
└── • TableScan
source: **/my_collection
order: STABLE
properties: * - { __create_time__, __update_time__ }
output record: $record_1
output bindings: {$user_id_1=user_id}
variables: [$record_1, $user_id_1]
Execution:
records returned: 1
records scanned: 1
다음 단계
달리 명시되지 않는 한 이 페이지의 콘텐츠에는 Creative Commons Attribution 4.0 라이선스에 따라 라이선스가 부여되며, 코드 샘플에는 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 Google Developers 사이트 정책을 참조하세요. 자바는 Oracle 및/또는 Oracle 계열사의 등록 상표입니다.
최종 업데이트: 2025-08-29(UTC)
[null,null,["최종 업데이트: 2025-08-29(UTC)"],[],[],null,["\u003cbr /\u003e\n\n\n|--------------------------------------------------------|\n| *Relevant to Cloud Firestore Enterprise edition only.* |\n\n\u003cbr /\u003e\n\nThis page describes how to retrieve query execution information when you execute a query.\n\nUse Query Explain\n\nYou can use Query Explain to understand how your queries are being executed.\nThis provides details that you can use to [optimize your queries](/docs/firestore/enterprise/optimize-query-performance).\n\nYou can use Query Explain through the Google Cloud console or the `explain` command. \n\nConsole\n\nExecute a query in the Query Editor and open the **Explanation** tab:\n\n1. In the Google Cloud console, go to the **Databases** page.\n\n [Go to Databases](https://console.cloud.google.com/firestore/databases)\n2. From the list of databases, select a Cloud Firestore with MongoDB compatibility database. The Google Cloud console opens the **Firestore Explorer** for that database.\n3. Enter a query in the query editor and click **Run**.\n4. Click the **Explanation** tab to view the query analysis output.\n\nMongoDB API\n\nQuery Explain in the MongoDB API is supported through the\n[`explain`](https://www.mongodb.com/docs/manual/reference/command/explain/)\ncommand which you can use in tools such as Mongo Shell and Compass.\n\n\nThe `explain` command is supported with the `aggregate`,\n`find`, `distinct`, and `count`\ncommands, for example: \n\n```text\ndb.collection.explain.find(...)\n```\n\n\nYou can also use the `explain()` method, for example: \n\n```text\ndb.collection.find({QUERY}).explain()\n```\n\nLimitations Note the following limitations and differences:\n\n- Query Explain does not support commands which return a cursor. For example,\n invoking explain by calling the following command directly is not supported:\n\n ```verilog\n db.collection.aggregate(..., explain: true)\n ```\n- Query Explain is only supported on the\n `find`, `aggregate`, `count`, and `distinct`\n commands.\n\n- The `Verbosity` and `Comment` options of Query Explain\n are not supported through the MongoDB API. The behaviour matches the\n `executionStats` option. The `allPlansExecution` and\n `queryPlanner` options are ignored if provided.\n\nAnalysis\n\nThe output of Query Explain contains two main components-the Summary Statistics and Execution Tree.\nConsider this query as an example: \n\n db.order.aggregate(\n [\n { \"$match\": { \"user_id\": 1234 } },\n { \"$sort\": { \"date_placed\": 1 } }\n ]\n )\n\nSummary Statistics\n\nThe top of the explained output contains a summary of the execution statistics.\nUse these statistics to determine if a query has high latency or cost. It also\ncontains memory statistics which let you know how close your query is\nto [memory limits](/docs/firestore/enterprise/quotas). \n\n Billing Metrics:\n read units: 1\n\n Execution Metrics:\n request peak memory usage: 4.00 KiB (4,096 B)\n results returned: 1\n\nExecution Tree\n\nThe execution tree describes the query execution as a series of nodes. The\nbottom nodes (leaf nodes) retrieve data from the storage layer which traverses\nup the tree to generate a query response.\n\nFor details about each execution node,\nrefer to the [Execution reference](/docs/firestore/enterprise/query-explain-reference).\n\nFor details on how to use this information to optimize your queries,\nsee [Optimize query execution](/docs/firestore/enterprise/optimize-query-performance).\n\nThe following is an example of an execution tree: \n\n • Compute\n | $out_1: map_set($record_1, \"__id__\", $__id___1, \"__key__\", $__key___1, \"__row_id__\", $__row_id___1, \"__$0__\", $__$0___2)\n | is query result: true\n |\n | Execution:\n | records returned: 1\n |\n └── • Compute\n | $__$0___2: UNSET\n |\n | Execution:\n | records returned: 1\n |\n └── • Compute\n | $__key___1: UNSET\n | $__row_id___1: UNSET\n |\n | Execution:\n | records returned: 1\n |\n └── • Compute\n | $__id___1: _id($record_1.__key__)\n |\n | Execution:\n | records returned: 1\n |\n └── • MajorSort\n | fields: [$v_5 ASC]\n | output: [$record_1]\n |\n | Execution:\n | records returned: 1\n | peak memory usage: 4.00 KiB (4,096 B)\n |\n └── • Compute\n | $v_5: array_get($v_4, 0L)\n |\n | Execution:\n | records returned: 1\n |\n └── • Compute\n | $v_4: sortPaths(array($record_1.date_placed), [date_placed ASC])\n |\n | Execution:\n | records returned: 1\n |\n └── • Filter\n | expression: $eq($user_id_1, 1,234)\n |\n | Execution:\n | records returned: 1\n |\n └── • TableScan\n source: **/my_collection\n order: STABLE\n properties: * - { __create_time__, __update_time__ }\n output record: $record_1\n output bindings: {$user_id_1=user_id}\n variables: [$record_1, $user_id_1]\n\n Execution:\n records returned: 1\n records scanned: 1\n\nWhat's next\n\n- To learn about the execution tree nodes, see the [Query execution reference](/docs/firestore/enterprise/query-explain-reference).\n- To learn how to optimize your queries, see [Optimize query execution](/docs/firestore/enterprise/optimize-query-performance)."]]