hint()(指定查询索引)
最后更新:2026-10-09
hint()(指定查询索引)
hint()强制查询使用指定的索引,语法为`db.users.find({ age: { $gt: 20 } }).hint({ age: 1 })`,参数可以是指定的索引键,也可以是索引名。查询优化器通常能选出好索引,但个别场景(如数据分布不均衡)hint()可以绕过错误选择。生产环境请谨慎使用并定期验证索引仍然有效。
| 分类 | 游标 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
db.<集合>.find(<条件>).hint(<索引键或索引名>)
⚙️ 参数
| 索引键或索引名 | 要强制使用的索引,如{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()强制查询走指定索引,跳过查询优化器的自动选择,用于纠正优化器选错索引的情况。
Qhint指定的索引不存在会怎样?
A查询会直接报错,不会自动回退到其他索引。
Qhint怎么强制全表扫描?
A使用hint({$natural: 1})即可,表示按物理顺序扫描全部文档。