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

mongodb的and查詢

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

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

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

2017年4月27日 19:13