hint() (インデックスの強制)
最終更新:2026-10-09
hint() (インデックスの強制)
hint() はクエリに特定のインデックスを使うよう強制します: `db.users.find({ age: { $gt: 20 } }).hint({ age: 1 })`。インデックスのキーまたは名前を渡します。通常はオプティマイザがうまく選びますが、データ分布が偏っている場合、hint() は誤った選択を上書きできます。本番では控えめに使い、インデックスが引き続き適切かを再確認してください。
| カテゴリ | カーソル |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
db.<collection>.find(<filter>).hint(<indexKeyOrName>)
⚙️ パラメータ
| インデックスキーまたは名前 | 強制するインデックス(例: {age: 1} または 'age_1')。 |
|---|
戻り値:インデックスを強制したカーソル(チェーン可能)。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// hint: age_1 インデックスを強制する
const result = db.users.find({ age: { $gt: 20 } })
.hint({ age: 1 })
.toArray()
result.length
出力:
35
📌 注意事項
- 指定したインデックスが存在しない場合はエラーが投げられる
- hint() は永遠に最適とは限らない。データが変われば再評価する
- hint({$natural: 1}) はコレクションスキャンを強制する
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Qhint はインデックスとどう関係しますか?
Ahint() はオプティマイザの選択を迂回して、クエリを指定のインデックスに強制します。オプティマイザが誤る場合の修正手段です。
Q指定したインデックスが存在しない場合は?
Aクエリは即座にエラーになります。他のインデックスへのフォールバックはありません。
Qhint でコレクションスキャンを強制するには?
Ahint({$natural: 1}) を渡します。物理的な順序でドキュメントをスキャンします。