我每晚創建一個獨立的集合,刷新數據,我做的第一件事是刪除當前所有的條目。通過分析我發現這個刪除命令可能會花費101190毫秒以上。MongoDB:剖析 - 刪除
這是正常的嗎?有什麼我應該做的,以加快這個查詢?似乎只是清空集合應該是相當即時的。
謝謝你的幫助!
我每晚創建一個獨立的集合,刷新數據,我做的第一件事是刪除當前所有的條目。通過分析我發現這個刪除命令可能會花費101190毫秒以上。MongoDB:剖析 - 刪除
這是正常的嗎?有什麼我應該做的,以加快這個查詢?似乎只是清空集合應該是相當即時的。
謝謝你的幫助!
做一個沒有過濾條件的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')
dcrosta已經描述了爲什麼remove()
可能是緩慢的原因,這也是爲什麼清除集合中的所有數據不是一個好主意。
由於您可以在MongoDB中實時創建或刪除集合,因此更快更好的方法是簡單地刪除集合,然後插入新文檔(集合將自動重新創建)。
所以剛剛發出db.collname.drop()
。
非常好,非常感謝你對這件事的堅持;我不知道移除可能非常耗時。 – Petrogad