在Mongodb查询语句中使用hint()

        通过查看Mongodb查询语句的执行计划,可以查看该语句通过查询优化器选中的执行计划和备选的执行计划。在实际查询过程中,因为Mongodb统计信息的更新和自动优化,对某些查询Mongodb给出的执行计划并不是最优的计划。这时,使用hint()指定索引,生成符合预期的执行计划。

实现机制

        在查询语句中添加hint(), 生成执行计划工程中, hint指定的索引方案会覆盖Mongodb默认的索引选择方案。

使用方法

        在查询语句中添加hint(),

db.collection.find().hint().

        查看带有hint()查询语句的执行计划

db.collection.explain().find().hint()

        hint()方法,接受一个带有字符串类型或object类型的参数。其中, 字符串类型的参数是索引名称。而object 类型的参数是索引键值的定义。

参数类型 描述
字符串 索引名称,如“user_1”
对象 索引key定义,如{user: 1}, 当输入参数为{$natural:1},Mongodb查询不使用索引

使用限制

  • 当Mongodb查询命令中包含索引过滤器时,Mongodb不会使用hint()定义的索引信息。
  • 查询中包含$text表达式时,不可以使用hint()指定索引,mongodb使用全文检索建立的索引。
  • hint()中不可以指定隐藏状态或不存在的索引,否则语句执行时会报错
  • 在时序集合中, 只能使用索引名称作为hint()字符串参数,不能以使用索引键对象。

使用实例

        在查询语句中使用hint()

  • 使用索引key定义作为参数
db.users.find().hint({age:1})
  • 使用索引名称作为hint()字符串参数
db.users.find().hint(“age_1”)
  • 强制全表扫描
db.users.find().hint({$natural:1})
  • 强制全表倒序扫描
db.users.find().hint({$natural:-1})

你可能感兴趣的:(mongodb,mongodb,数据库)