更新索引字段對wiredTiger有任何影響嗎? 我正在通過下面的問題。 問:添加索引{a:1}可能會降低以下哪個操作的速度?檢查所有適用。答:MongoDB:使用WiredTiger存儲更新索引字段
A. db.collection.update({b:456},{$ inc:{a:1}});
我相信上面的回答是MMAPV1正確的,但在wiredTiger不應該有任何影響,因爲wiredTiger使用不可變的文件標識符,而不是存儲位置的地址。有人可以證實我的理解。
更新索引字段對wiredTiger有任何影響嗎? 我正在通過下面的問題。 問:添加索引{a:1}可能會降低以下哪個操作的速度?檢查所有適用。答:MongoDB:使用WiredTiger存儲更新索引字段
A. db.collection.update({b:456},{$ inc:{a:1}});
我相信上面的回答是MMAPV1正確的,但在wiredTiger不應該有任何影響,因爲wiredTiger使用不可變的文件標識符,而不是存儲位置的地址。有人可以證實我的理解。
我會說答案是'是'。
的documentation明確指出:
添加一個索引有寫操作一些負面的性能影響。
由於WiredTiger不支持就地更新,執行這個命令將有效地複製,除了將在新文件中反映給定的變化({ $inc : { a : 1 } }
)過濾條件({ b : 456 }
)發現,現有的文件,太。第二步,分配給原始文檔的存儲空間將被釋放。
隨着MMAPv1,爲更新的文件所需要的空間也不會從原有的不同,所以就地更新發生。
然而,不管所使用的存儲引擎,更改索引字段需要更新受影響的索引(ES),太。對於MMAPv1,「僅」索引葉的鍵在您的情況下發生變化 - 文檔保持在同一位置。在WiredTiger的情況下,密鑰和文檔位置都需要在索引中更新。