2015-07-21 24 views
1

如果我有一個pymongo查詢,收集與4000左右的文件,如下所示:索引會使find_one()更快嗎?

mong = pymongo.Connection()['ASD_2']['APS2'] 
py_mong = mong.find_one({'plate':'123456'}) 

考慮沒有.explain()["cursor"].explain()["nscanned"]允許在find_one(),因此沒有在手的方法來找出本質的掃描,任何人都可以告訴我,當我只打算使用find_one()是否值得索引收藏?

+0

也許你可以使用'timeit'模塊試試嗎? –

回答

1

是的,絕對。

我怎麼知道?

首先,如果沒有,那將是完全不可接受的。人們會抱怨find_onefind相比令人驚訝和不必要的緩慢,並且開發團隊已經修復了它(或者被認爲是愚蠢的)。

其次,我檢查了代碼。實施正是你所期望,這意味着find_one僅僅是一種包裝器find

def find_one(self, spec_or_id=None, *args, **kwargs): 
    if spec_or_id is not None and not isinstance(spec_or_id, dict): 
     spec_or_id = {"_id": spec_or_id} 
    for result in self.find(spec_or_id, *args, **kwargs).limit(-1): 
     return result 
    return None 

(pymongo版本2.4.2)

1

是的,索引將避免線性搜索所需的板塊並在對數時間內工作(快得多)。

+0

但你怎麼知道,你怎麼才能決定使用'find_one()'執行掃描的性質?我知道它與'find()'有很大的不同,但是你確定它可以用於'find_one()'嗎? – ajsp

+1

沒有理由不。如果您不確定,請進行測試並找出答案! –