我剛剛開始使用MongoDB並試圖瞭解索引如何工作。我有一個集合中的項目列表。每個項目都有一個增加的版本。然後,刪除所有以前的版本(小於當前版本)(記錄未更新,以便兩個版本都可用一段時間)。商品ID和版本有一個複合索引。對於刪除,它是否有所作爲(就性能而言)是否使用$ ne與$ lt?
我會假設不,但我只想確認一下。
我剛剛開始使用MongoDB並試圖瞭解索引如何工作。我有一個集合中的項目列表。每個項目都有一個增加的版本。然後,刪除所有以前的版本(小於當前版本)(記錄未更新,以便兩個版本都可用一段時間)。商品ID和版本有一個複合索引。對於刪除,它是否有所作爲(就性能而言)是否使用$ ne與$ lt?
我會假設不,但我只想確認一下。
不知道實施細節$lt
可能比$ne
更有效。在B-樹索引$ne
將是兩個範圍掃描($lt
和$gt
),而$lt
只是一個。
但在你的情況下$lt
似乎是你想要的無論如何(找到舊版本)。如果您使用$ne
,則可能會意外刪除更新的版本,您認爲這些版本不存在,但實際上可能是在同一時間創建的。請記住,MongoDB不支持跨文檔的事務或一致視圖。併發更新可能會在這裏引起你的注意。
實際上,它們有很大的不同。 "$ne and $nin operators are not selective",這意味着索引根本不會加快查詢的這一部分。所以如果你使用$ ne,那麼複合索引的版本部分將不會被MongoDB使用。