为了账号安全,请及时绑定邮箱和手机立即绑定

mongodb的and查询

mongodb的and查询

小怪兽爱吃肉 2018-08-18 23:06:29
假设db.find({a:1,b:1,c:1}),满足条件a的文档有100万条,满足条件b的文档有70万条,满足条件c的有30万条,这三个字段都没有索引,进行全表扫描,那么find({a:1,b:1,c:1})和find({c:1,b:1,a:1}),and条件连接中字段顺序不一样,这二者查询速度是否会不一样,还是说不管条件字段谁写在前面谁写在后面对mongodb都一样?
查看完整描述

1 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

  • 都没有索引的情况下只有一个执行计划:COLLSCAN(全表扫描),所以一定是把每条记录拿出来比一遍ABC是不是都满足然后得出结果,跟有多少条件无关。

  • 有索引部分覆盖条件的情况下系统会挑它认为最优的索引,在其结果上再扫描得出的文档,看是不是满足其他条件。

  • 如果索引正好能够覆盖全部条件,那索引直接就可以给出结果(最优情况)。

无论哪种,都不存在你想的先查一个条件,再查一个条件,再……不可能有那样的执行计划,太浪费。所以条件的顺序其实是无关的。


查看完整回答
反对 回复 2018-08-26
  • 1 回答
  • 0 关注
  • 779 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信