mongodb-query-optimizer
MongoDBのクエリ最適化とインデックス設計を支援します。「このクエリを最適化したい」「インデックスの貼り方を教えて」「クエリが遅い原因を知りたい」など、パフォーマンスや最適化に関する質問が来た場合にのみ使用し、一般的なクエリ作成には使用しません。最適化戦略としてはインデックスの活用を優先し、利用可能な場合はMongoDB MCPを使用します。
description の原文を見る
>- Help with MongoDB query optimization and indexing. Use only when the user asks for optimization or performance: "How do I optimize this query?", "How do I index this?", "Why is this query slow?", "Can you fix my slow queries?", "What are the slow queries on my cluster?", etc. Do not invoke for general MongoDB query writing unless user asks for performance or index help. Prefer indexing as optimization strategy. Use MongoDB MCP when available.
SKILL.md 本文
MongoDB Query Optimizer
このスキルが実行される時
以下の場合のみ実行します:
- クエリ/インデックスの最適化またはパフォーマンス支援が必要
- クエリが遅い理由、またはそれを高速化する方法
- クラスタ上の遅いクエリ、および/またはそれらを最適化する方法
ユーザーが最適化、遅いクエリ、またはインデックスに関する支援をリクエストしない限り、ルーチンのクエリ作成には実行しないでください。
高レベルワークフロー
一般的なパフォーマンス支援
ユーザーが遅いクエリを調べたい、または一般的なパフォーマンス提案を探している場合 (特定のクエリに関するものではない):
- MongoDB MCP サーバーの atlas-get-performance-advisor ツールを使用して、遅いクエリログとパフォーマンスアドバイザーの出力を取得します
- この情報に基づいて提案を作成します
Atlas MCP サーバーが設定されていない、または atlas-get-performance-advisor を正しいクラスタに対して実行するのに十分な情報がない場合は、一般的なパフォーマンス分析には Atlas MCP サーバーの設定と API 認証情報が必要であることをユーザーに伝え、設定するか特定のクエリについて質問するよう提案します。
特定のクエリに関するヘルプ
ユーザーが特定のクエリについて質問している場合:
- collection-indexes、explain、および find MCP ツールを使用して、コレクションの既存インデックス、クエリの explain() 出力、およびコレクションのサンプルドキュメントを取得します
- atlas-get-performance-advisor MCP ツールを使用して、遅いクエリログとパフォーマンスアドバイザーの出力を取得します
収集した情報と MongoDB のベストプラクティス、および参照ファイルの例に基づいて、最適化提案を作成します。可能な場合、クエリを完全にカバーするインデックスの作成を優先します。MongoDB MCP サーバーを使用できない場合でも、提案を作成してください。
MCP: 利用可能なツール
実行方法。 MongoDB MCP サーバーを呼び出し、正確なツール名を toolName として、単一の引数オブジェクトを arguments として渡します。ツール名をオプション、クエリパラメータ、またはネストされたキーとして渡さないでください。MCP ツール名として渡し、パラメータを引数オブジェクトとして渡します。完全な MCP サーバーツールリファレンス: MongoDB MCP Server Tools。
データベースツール (MCP クラスタ接続が機能する場合):
| ツール名 (正確) | 引数オブジェクト |
|---|---|
collection-indexes | { "database": "<db>", "collection": "<coll>" } — 両方とも必須の文字列。 |
explain | { "database": "<db>", "collection": "<coll>", "method": [ { "name": "find", "arguments": { "filter": {...}, "sort": {...}, "limit": N } } ], "verbosity": "executionStats" }. method は 1 つのオブジェクトの配列: name は "find"、"aggregate"、または "count" です。arguments はそのメソッドのパラメータを保持します (例: find: filter、sort、limit; aggregate: pipeline; count: query)。オプションの verbosity: "queryPlanner" (デフォルト)、"executionStats"、"queryPlannerExtended"、"allPlansExecution"。 |
find | { "database": "<db>", "collection": "<coll>", "filter": {...}, "projection": {...}, "sort": {...}, "limit": N } — database、collection、および filter は必須です。オプション: projection、sort、limit。 |
Atlas ツール (Atlas API 認証情報が設定されている場合):
| ツール名 (正確) | 引数オブジェクト |
|---|---|
atlas-list-projects | {} または { "orgId": "<24-char hex>" }。プロジェクト ID を返します。パフォーマンスアドバイザーの projectId を取得するために使用します。 |
atlas-get-performance-advisor | 必須: "projectId" (24 文字の 16 進数文字列)、"clusterName" (文字列、1~64 文字、英数字/アンダースコア/ダッシュ)。オプション: "operations" — "suggestedIndexes"、"dropIndexSuggestions"、"slowQueryLogs"、"schemaSuggestions" から文字列の配列 (必要なもののみリクエスト); slowQueryLogs のみの場合: "since" (ISO 8601 日時)、"namespaces" ("db.coll" 文字列の配列)。 |
ユーザーの質問について、接続文字列と最適化しているクエリに関連する Atlas API の両方から情報を取得してください。
1. MongoDB MCP 用の DB 接続文字列が機能する場合
一般的なフロー: collection-indexes → explain → find (サンプルドキュメント) を呼び出します。
collection-indexes— 結果のclassicIndexes(各々がname、keyを持つ) を使用して、クエリが既存のインデックスを既に使用できるかどうかを確認します。explain— まず"queryPlanner"モードで実行して COLLSCAN をチェックします。クエリがインデックスを使用するか、コレクションが非常に小さい場合は、"executionStats"で再度実行します (10 秒のタイムアウト) してスキャンされたドキュメント数と返されたドキュメント数を取得します。
2. MongoDB MCP 用の Atlas API アクセスが機能する場合
プロジェクト ID が必要な場合は、まず atlas-list-projects を呼び出します。次に、必要な operations のみを指定して atlas-get-performance-advisor を呼び出します:
| 操作値 | 使用する場合 |
|---|---|
slowQueryLogs | 遅いクエリを取得する場合 — 最も遅く、最も頻繁なものを優先します。オプション: namespaces でコレクションにスコープ; since で時間ウィンドウ。 |
suggestedIndexes | クラスタインデックス推奨事項を取得する場合 |
dropIndexSuggestions | ユーザーが削除対象またはインデックスオーバーヘッド削減対象を質問する場合 |
schemaSuggestions | ユーザーがスキーマ/クエリ構造のアドバイスをインデックスと並行して質問する場合 |
MCP ツール名を operations 値として渡さないでください — operations は取得するデータをリストする別の引数です。
ワークフロー例 1 (特定のクエリに関するヘルプ)
ユーザー: 「このクエリが遅い理由は? db.orders.find({status: 'shipped', region: 'US'}).sort({date: -1})」
MCP DB 接続が設定されていて、データベースおよびコレクション名がわかっている場合、ステップ 1~3 を実行します。そうでなければステップ 4 をスキップします。
-
既存のコレクションインデックスを確認:
collection-indexesを database=store、collection=ordersで呼び出します- 結果:
{_id: 1}、{status: 1}、{date: -1}
-
explain を実行:
explainを method=find、filter={status: 'shipped', region: 'US'}、sort={date: -1}、verbosity=queryPlannerとexecutionStatsで呼び出します- 結果:
{status: 1}インデックスを使用、メモリ内 SORT、totalKeysExamined: 50000、nReturned: 100
-
find を実行:
- スキーマを推測するためにサンプルドキュメントを取得するために limit=1 で
findを呼び出します。
- スキーマを推測するためにサンプルドキュメントを取得するために limit=1 で
MCP Atlas 接続が設定されている場合、ステップ 4 を実行します。そうでなければステップ 5 をスキップします。
-
atlas-get-performance-advisor を実行:
- MCP 接続文字列からクラスタ名を取得するか、ユーザーに projectId/clusterName を提供するよう求めます
- slowQueryLogs を使用して過去 24 時間の database=
store、collection=ordersからの遅いクエリログを取得します - suggestedIndexes を使用してクエリのインデックス提案をチェックします
-
診断: explain 出力と遅いクエリログに基づいて、このクエリは 100 ドキュメントをターゲットにしていますが、50K インデックスエントリをスキャンします (選択性が低い: 0.002)。メモリ内ソートがオーバーヘッドを追加します。インデックスが両方のフィルタフィールドまたはソートをサポートしていません。
-
推奨: 複合インデックス
{status: 1, region: 1, date: -1}を ESR に従って作成します (2 つの同等フィールド、次にソート)。これでメモリ内ソートが削除され、status と region の両方でフィルタリングすることで選択性が向上します。
MongoDB MCP サーバーがセットアップされていない場合でも、ベストインデックス作成プラクティスに従ってください。
ワークフロー例 2 (一般的なデータベースパフォーマンス支援)
ユーザー: 「クラスタ上の遅いクエリの最適化をサポートしてもらえますか?」
- atlas-get-performance-advisor を実行:
- 接続文字列からクラスタ名を取得して、atlas-list-projects で必要なプロジェクト名を推測してください。確認できない場合はユーザーにクラスタ名とプロジェクト ID を求めます。
- slowQueryLogs を使用して過去 24 時間からの遅いクエリログを取得します
- suggestedIndexes を使用します
- dropIndexSuggestions を使用します
- schemaSuggestions を使用します
- 診断および推奨: 遅いクエリログとパフォーマンスアドバイザーアドバイスに基づいて、
db.ordersコレクション上の複合インデックス{status: 1, region: 1, date: -1}を作成して、find({status: 'shipped', region: 'US'}).sort({date: -1})などのクエリを最適化できます
すべてのパフォーマンスアドバイザー出力と遅いクエリログを確認します。何が改善されているか、なぜかについての情報を提供し、最大の影響可能性を持つ提案 (例: 最も多くのクエリに影響するインデックス、または最も悪いパフォーマンスを持つクエリ) に焦点を当てます。
参照の読み込み
診断と推奨を開始する前に、参照ファイルを読み込みます。
常に読み込む:
references/core-indexing-principles.mdreferences/antipattern-examples.md
条件付きで読み込む:
- 集約パイプラインを診断する場合 →
references/aggregation-optimization.md - replaceOne、findOneAndUpdate など、ドキュメントを変更するクエリを診断する場合 →
references/update-query-examples.md(oplog 効率的な更新および一般的な更新アンチパターン用)
出力
- 回答を短く明確に保つ: インデックスと最適化提案に関する数文、およびそれらの背後にある理由 (例: 一般的なインデックス作成原則、クラスタの遅いクエリログの観察、またはパフォーマンスアドバイザーのアドバイスの確認)
- 最大影響のインデックスまたは最適化に焦点を当てます - 省略した最適化がある場合はユーザーに知らせ、質問された場合はそれらを提示します。
- 「これらのインデックスを作成する必要があり、確実にアプリケーションのパフォーマンスが向上します」などの強い言葉は使用しない - 特定のクエリのための提案であること説明し、それらの背後にある理由を明記します。
- コレクションに既に存在するインデックスの数を考慮します (既知の場合) - 一般に 20 以上はあってはいけません
- Atlas Performance Advisor からの提案がある場合のみインデックスの削除を提案します
- ユーザーが承認を与えない限り、MCP 経由でインデックスを直接作成しないでください
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- mongodb
- リポジトリ
- mongodb/agent-skills
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/mongodb/agent-skills / ライセンス: Apache-2.0
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。