鍍金池/ 問答/數(shù)據(jù)庫/ mongodb的and查詢

mongodb的and查詢

假設(shè)db.find({a:1,b:1,c:1}),滿足條件a的文檔有100萬條,滿足條件b的文檔有70萬條,滿足條件c的有30萬條,這三個字段都沒有索引,進(jìn)行全表掃描,那么find({a:1,b:1,c:1})和find({c:1,b:1,a:1}),and條件連接中字段順序不一樣,這二者查詢速度是否會不一樣,還是說不管條件字段誰寫在前面誰寫在后面對mongodb都一樣?

回答
編輯回答
尐懶貓
  • 都沒有索引的情況下只有一個執(zhí)行計劃:COLLSCAN(全表掃描),所以一定是把每條記錄拿出來比一遍ABC是不是都滿足然后得出結(jié)果,跟有多少條件無關(guān)。
  • 有索引部分覆蓋條件的情況下系統(tǒng)會挑它認(rèn)為最優(yōu)的索引,在其結(jié)果上再掃描得出的文檔,看是不是滿足其他條件。
  • 如果索引正好能夠覆蓋全部條件,那索引直接就可以給出結(jié)果(最優(yōu)情況)。

無論哪種,都不存在你想的先查一個條件,再查一個條件,再……不可能有那樣的執(zhí)行計劃,太浪費。所以條件的順序其實是無關(guān)的。

2017年4月27日 19:13