2012-08-27 51 views

回答

19

如果您通過從集合中刪除所有文檔,那麼您將執行更多工作(釋放文檔的存儲,清除指向文檔的索引條目等)。如果您只是刪除集合,它只會回收集合及其索引所使用的範圍。

另一個區別是,刪除集合也會刪除集合的索引。

20

簡單地刪除集合的好處是它比刪除集合的所有文檔快得多。如果您的收藏集將被「立即重新創建」(假設包括索引重新創建),那麼這可能是最有吸引力的選擇。本書MongoDB: The Definitive Guide

作者(克里斯蒂娜·喬多羅和邁克爾·迪羅爾夫)跑了,他們提供了一個定時與一個記錄的Python腳本實驗。 drop的結果爲0.01秒,remove的結果爲46.08秒。現在,雖然確切的時間可能會因硬件和其他因素而有所不同,但它說明drop顯着更快。

參考: Chodorow K.,Dirolf M.(2010)。 「MongoDB:權威指南」O'Reilly Media,Inc. Sebastapol,CA.,第25頁

+5

+1的答案,但有一點需要注意的丟棄VS刪除,那就是當你在分片環境中,也出現了一些錯誤對涉及重複使用的各個版本刪除集合名稱(甚至在某些情況下甚至是前綴)。我所知道的最新相關錯誤是:https://jira.mongodb.org/browse/SERVER-4262,並在2.2中修復 - 如果您計劃大量丟棄/重新創建,只需要注意一點。 –

+0

感謝您的提示,@AdamC!我想這種情況在混合中的分片/複製中確實有點棘手。我在家裏的實驗室裏有一個主/從複製配置,我不得不嘗試一下。 – Aaron

1

刪除和刪除集合主要是實現細節。

刪除收集需要一個由內部狀態的一次更新中發生的集合中存在。

刪除收集需要騰出數據文件的數據庫裏面的一些大型數據結構

刪除集合比逐個刪除直到集合爲空時快得多。

元數據像索引將存在,如果集合被刪除,而不是當其丟棄。

來源:MongDB大學課程