• Projects
  • Service
  • About
  • branding.bz
  • Podcast
  • Tips
  • FAQ
  • Recruit
  • Download
  • Contact
  • branding.bz(ブランド構築SaaS)
  • DESIGN NOW(デザインメディア)
  • X
  • LinkedIn
  • Spotify
  • Facebook

213-0011 神奈川県川崎市高津区久本3-6-7-303

© 2026 ID INC. All rights reserved

claude-skills/スキル
SKILLOfficialdatabase

mongodb-query-optimizer

プラグイン
mongodb-atlas
ライセンス
Apache-2.0
ソース
GitHub で見る ↗
説明

MongoDB クエリ最適化とインデックスの支援 MongoDB(データベース管理システム)のクエリ最適化とインデックス設定を手助けします。 **次のような場合に使用:** - 「このクエリを最適化するにはどうすればいい?」 - 「どうやってインデックスを作成すればいい?」 - 「このクエリが遅い理由は?」 - 「遅いクエリを直してもらえますか?」 - 「クラスタ(複数のサーバーをつなげたシステム)上の遅いクエリを調べたい」 など、パフォーマンス(処理速度)の改善に関する相談の場合です。 **留意事項:** - MongoDB クエリの基本的な書き方の説明には使用しません。ユーザーがパフォーマンスやインデックス に関する質問をした場合のみ対応します。 - 最適化戦略としてインデックスの活用を優先的に提案します。 - MongoDB MCP が利用可能な場合はそちらを活用します。

原文を表示

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.

ユースケース
  • クエリの実行速度が遅いとき
  • インデックスを作成したいとき
  • クエリを最適化するとき
  • 遅いクエリの原因を調べるとき
本文(日本語訳)

MongoDB クエリ最適化

このスキルが呼び出される場合

次のような場合に使用します:

  • クエリやインデックス(検索を高速化するための索引)の最適化やパフォーマンス向上のサポート
  • クエリが遅い理由や高速化の方法
  • クラスタ上の遅いクエリやその最適化方法

ユーザーが最適化、遅いクエリ、またはインデックスに関するサポートを明確に求めていない限り、通常のクエリ作成では呼び出さないでください。

全体的なワークフロー

一般的なパフォーマンスサポート

ユーザーが遅いクエリを調査したい、または特定のクエリに限らない一般的なパフォーマンス改善を求めている場合:

  • 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文字の16進数>" }. パフォーマンスアドバイザー用の projectId を取得するためのプロジェクト ID 付きプロジェクトを返します。
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 に進んでください。

  1. 既存のコレクションインデックスを確認:

    • collection-indexes をデータベース=store、コレクション=orders で呼び出し
    • 結果: {_id: 1}、{status: 1}、{date: -1}
  2. explain を実行:

    • explain をメソッド=find、フィルタ={status: 'shipped', region: 'US'}、ソート={date: -1}、詳細度=queryPlanner と executionStats で呼び出し
    • 結果: {status: 1} インデックスを使用、メモリ内ソート実行、totalKeysExamined: 50000、nReturned: 100
  3. find を実行:

    • find をリミット=1 で呼び出し、スキーマを推測するためのサンプルドキュメントを取得。

MCP Atlas 接続が設定済みの場合は、ステップ 4 を実行してください。それ以外の場合はステップ 5 に進んでください。

  1. atlas-get-performance-advisor を実行:

    • MCP 接続文字列からクラスタ名を取得するか、ユーザーに projectId/clusterName を質問
    • slowQueryLogs を使用して、過去 24 時間のデータベース=store、コレクション=orders の遅いクエリログを取得
    • suggestedIndexes を使用してこのクエリのインデックス推奨事項をチェック
  2. 診断: explain 出力と遅いクエリログに基づいて、このクエリは 100 ドキュメントをターゲットとしていますが、50K インデックスエントリをスキャン (選別性: 0.002 と低い)。メモリ内ソートが追加オーバーヘッドを生成。インデックスがフィルタフィールド両方またはソートをサポートしていません。

  3. 推奨: ESR ルール(2 つの等価フィールド、その後ソート)に従い、複合インデックス {status: 1, region: 1, date: -1} を作成。これによりメモリ内ソートが排除され、status と region の両方でフィルタリングすることで選別性が向上します。

MongoDB MCP サーバーが設定されていない場合でも、MongoDB のベストプラクティスに従い最適化案を提示してください。

ワークフロー例 2(一般的なデータベースパフォーマンスサポート)

ユーザー: 「クラスタ上の遅いクエリの最適化をサポートしてくれますか?」

  1. atlas-get-performance-advisor を実行:

    • 接続文字列からクラスタ名を取得し、atlas-list-projects で必要なプロジェクト名を推測。不確実な場合はユーザーにクラスタ名とプロジェクト ID を質問
    • slowQueryLogs を使用して過去 24 時間の遅いクエリログを取得
    • suggestedIndexes を取得
    • dropIndexSuggestions を取得
    • schemaSuggestions を取得
  2. 診断と推奨: 遅いクエリログとパフォーマンスアドバイザーのアドバイスに基づいて、db.orders コレクションに複合インデックス {status: 1, region: 1, date: -1} を作成し、find({status: 'shipped', region: 'US'}).sort({date: -1}) のようなクエリを最適化できます。

パフォーマンスアドバイザーの出力と遅いクエリログを全て検討してください。改善内容と理由を提供し、最大のインパクトが期待できる提案に焦点を当ててください (例: 最も多くのクエリに影響するインデックス、または最悪のパフォーマンスを持つクエリ)。

リファレンスの読み込み

診断と推奨を開始する前に、リファレンスファイルを読み込んでください。

常に読み込むもの:

  • references/core-indexing-principles.md
  • references/antipattern-examples.md

条件付きで読み込むもの:

  • 集約パイプラインを診断する場合 → references/aggregation-optimization.md
  • replaceOne、findOneAndUpdate など、ドキュメントを変更するクエリを診断する場合 → references/update-query-examples.md (オペレーションログ効率的な更新と一般的な更新のアンチパターン用)

出力

  • 回答は短く明確にしてください: インデックスと最適化提案、その理由 (例: 一般的なインデックス原則、クラスタの遅いクエリログの観察、またはパフォーマンスアドバイザーのアドバイス) について数文で説明
  • 最大のインパクトをもつインデックスまたは最適化に焦点を当ててください — 省略した最適化がある場合はユーザーに知らせ、質問があれば提示してください
  • 「これらのインデックスを作成すると、アプリケーションのパフォーマンスが必ず向上します」のような強い言い方は使用しないでください — 特定のクエリに対する提案であること、その根拠を説明してください
  • コレクション上に既存するインデックスの数を検討してください (わかっている場合) — 一般的に 20 を超えるべきではありません
  • インデックスの削除は Atlas パフォーマンスアドバイザーからの提案がある場合のみを提案して
原文(English)を表示

MongoDB Query Optimizer

When this skill is invoked

Invoke only when the user wants:

  • Query/index optimization or performance help
  • Why a query is slow or how to speed it up
  • Slow queries on their cluster and/or how to optimize them

Do not invoke for routine query authoring unless the user has requested help with optimization, slow queries, or indexing.

High Level Workflow

General Performance Help

If the user wants to examine slow queries, or is looking for general performance suggestions (not regarding any particular query):

  • Use MongoDB MCP server atlas-get-performance-advisor tool to fetch slow query logs and performance advisor output
  • Make suggestions based on this information

If Atlas MCP Server for Atlas is not configured or you don’t have enough information to run atlas-get-performance-advisor against the correct cluster, tell the user that general performance analysis requires Atlas MCP Server configuration with API credentials, and suggest they configure it or ask about a specific query instead.

Help with a Specific Query

If the user is asking about a particular query:

  • Use collection-indexes, explain, and find MCP tools to get existing indexes on the collection, explain() output for the query, and a sample document from the collection
  • Use atlas-get-performance-advisor MCP tool to fetch slow query logs and performance advisor output

Then make an optimization suggestion based on collected information and MongoDB best practices and examples from reference files. Prefer creating an index that fully covers the query if possible. If you cannot use MongoDB MCP Server then still try to make a suggestion.

MCP: available tools

How to invoke. Call the MongoDB MCP server with the exact tool name as toolName and a single arguments object as arguments. Do not pass the tool name as an option, query param, or nested key; pass it as the MCP tool name and the parameters as the arguments object. Full MCP Server tool reference: MongoDB MCP Server Tools.

Database tools (when the MCP cluster connection works):

Tool name (exact) Arguments object
collection-indexes { "database": "<db>", "collection": "<coll>" } — both required strings.
explain { "database": "<db>", "collection": "<coll>", "method": [ { "name": "find", "arguments": { "filter": {...}, "sort": {...}, "limit": N } } ], "verbosity": "executionStats" }. method is an array of one object: name is "find", "aggregate", or "count"; arguments holds that method's params (e.g. find: filter, sort, limit; aggregate: pipeline; count: query). Optional verbosity: "queryPlanner" (default), "executionStats", "queryPlannerExtended", "allPlansExecution".
find { "database": "<db>", "collection": "<coll>", "filter": {...}, "projection": {...}, "sort": {...}, "limit": N } — database, collection, and filter are required. Optional: projection, sort, limit.

Atlas tools (when Atlas API credentials are configured):

Tool name (exact) Arguments object
atlas-list-projects {} or { "orgId": "<24-char hex>" }. Returns projects with their IDs; use to get projectId for Performance Advisor.
atlas-get-performance-advisor Required: "projectId" (24-character hex string), "clusterName" (string, 1–64 chars, alphanumeric/underscore/dash). Optional: "operations" — array of strings from "suggestedIndexes", "dropIndexSuggestions", "slowQueryLogs", "schemaSuggestions" (request only what you need); for slowQueryLogs only: "since" (ISO 8601 date-time), "namespaces" (array of "db.coll" strings).

For a user question, try to fetch information from both the connection string and Atlas API related to the query you are optimizing.

1. DB connection string works for MongoDB MCP

Typical flow: call collection-indexes → explain → find (sample doc).

  • collection-indexes — Use the result's classicIndexes (each has name, key) to see if the query can already use an existing index.
  • explain — Run in "queryPlanner" mode first to check for COLLSCAN. If the query uses an index or the collection is very small, run again with "executionStats" (10-second timeout) to get docs scanned vs. returned.

2. Atlas API access works for MongoDB MCP

If you need a project ID, call atlas-list-projects first. Then call atlas-get-performance-advisor with only the operations you need:

Operation value Use when
slowQueryLogs Fetching slow queries—prioritize by slowest and most frequent. Optional: namespaces to scope to a collection; since for a time window.
suggestedIndexes Fetching cluster index recommendations
dropIndexSuggestions User asks what to remove or reduce index overhead
schemaSuggestions User asks for schema/query-structure advice alongside indexes

Do not pass the MCP tool name as an operations value—operations is a separate argument listing what data to fetch.

Example workflow 1 (help with specific query)

User: "Why is this query slow? db.orders.find({status: 'shipped', region: 'US'}).sort({date: -1})"

If MCP db connection is configured and the database + collection names are known, run steps 1–3. Otherwise skip to step 4.

  1. Check existing collection indexes:

    • Call collection-indexes with database=store, collection=orders
    • Result shows: {_id: 1}, {status: 1}, {date: -1}
  2. Run explain:

    • Call explain with method=find, filter={status: 'shipped', region: 'US'}, sort={date: -1}, verbosity=queryPlanner and executionStats
    • Result: Uses {status: 1} index, then in-memory SORT, totalKeysExamined: 50000, nReturned: 100
  3. Run find:

    • Call find with limit=1 to fetch a sample document to impute the schema.

If MCP Atlas connection is configured, run step 4. Otherwise skip to step 5.

  1. Run atlas-get-performance-advisor:

    • Try to get the cluster name from the MCP connection string, or ask the user for projectId/clusterName
    • Use slowQueryLogs to fetch slow query logs from database=store, collection=orders in the past 24 hours
    • Use suggestedIndexes to check for index suggestions for the query
  2. Diagnose: Based on explain output and slow query logs, this query targets 100 docs but scans 50K index entries (poor selectivity: 0.002). In-memory sort adds overhead. Index doesn't support both filter fields or sort.

  3. Recommend: Create compound index {status: 1, region: 1, date: -1} following ESR (two equality fields, then sort). This eliminates in-memory sort and improves selectivity by filtering on both status and region.

If the MongoDB MCP server is not set up, follow best indexing practices.

Example workflow 2 (general database performance help)

User: "Can you help with optimizing slow queries on my cluster?”

  1. Run atlas-get-performance-advisor:
    • Try to get the cluster name from the connection string and deduce the project name you need in atlas-list-projects; if you are not sure, then ask the user for cluster name and project id.
    • Use slowQueryLogs to fetch slow query logs from the past 24 hours
    • Use suggestedIndexes
    • Use dropIndexSuggestions
    • Use schemaSuggestions
  2. Diagnose and Recommend: Based on slow query logs and performance advisor advice, you can create the compound index {status: 1, region: 1, date: -1} on the db.orders collection to optimize queries such as find({status: 'shipped', region: 'US'}).sort({date: -1})

Examine all performance advisor output as well as slow query logs. Provide information on what is being improved and why, and focus on suggestions that have the potential for greatest impact (e.g., indexes that affect the most queries, or queries that have the worst performance).

Load references

Before beginning diagnosis and recommendation, load reference files.

Always load:

  • references/core-indexing-principles.md
  • references/antipattern-examples.md

Conditionally load these files:

  • If diagnosing aggregation pipelines → references/aggregation-optimization.md
  • If diagnosing queries that change docs such as replaceOne, findOneAndUpdate, etc. → references/update-query-examples.md for oplog-efficient updates and common update anti-patterns

Output

  • Keep answers short and clear: a few sentences on index and optimization suggestions, and reasoning behind them (e.g. general indexing principles, observing slow query logs in the cluster, or seeing advice in Performance Advisor)
  • Focus on highest impact indexes or optimizations - if you've omitted some optimizations let the user know and present them if asked.
  • Do not use strong language, such as saying “You should create these indexes and they will definitely improve application performance” - Explain they are suggestions for certain queries, and give the reasoning behind them.
  • Consider how many indexes already exist on the collection (if known) - there shouldn’t generally be more than 20
  • Suggest removing indexes only if the suggestion comes from Atlas Performance Advisor
  • Do not create indexes directly via MCP unless the user gives approval

原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。