2011-12-10 64 views
0

我每晚創建一個獨立的集合,刷新數據,我做的第一件事是刪除當前所有的條目。通過分析我發現這個刪除命令可能會花費101190毫秒以上。MongoDB:剖析 - 刪除

這是正常的嗎?有什麼我應該做的,以加快這個查詢?似乎只是清空集合應該是相當即時的。

謝謝你的幫助!

回答

1

做一個沒有過濾條件的remove()可能會很慢,因爲每個文檔都必須從集合數據文件和任何存在的索引(包括_id上的默認索引)中刪除。

如果要刪除集合中的所有文檔,尤其是僅使用默認索引,或者可以從應用程序代碼中輕鬆地重新創建索引,則可以使用drop()集合,然後開始添加您的新數據。

可以進一步減少該集合似乎是通過使用renameCollection command像空或部分滿的時間(以僞的Python):

for new_record in new_records: 
    db.newcollection.insert(new_record) 

for index_spec in index_specs: 
    db.newcollection.ensure_index(index_spec) 

db.oldcollection.drop() 
db.command('renameCollection', 'newcollection', to='oldcollection') 
+0

非常好,非常感謝你對這件事的堅持;我不知道移除可能非常耗時。 – Petrogad

0

dcrosta已經描述了爲什麼remove()可能是緩慢的原因,這也是爲什麼清除集合中的所有數據不是一個好主意。

由於您可以在MongoDB中實時創建或刪除集合,因此更快更好的方法是簡單地刪除集合,然後插入新文檔(集合將自動重新創建)。

所以剛剛發出db.collname.drop()