MongoDB的常見問答—索引

這篇文章提出了一些關於索引的常見問題,更詳細的信息請參見https://docs.mongodb.com/manual/faq/indexes/

一、如何創建索引?
在集合上創建索引採用db.collection.createIndex()方法. 創建索引屬於管理性的操作。一般來說,應用程序不應該經常地調用db.collection.createIndex()方法。

注意:
建立索引影響性能。參考建立索引是如何影響數據庫性能的?管理員在建立索引之前應該仔細考慮其對數據庫性能的影響。

二、建立索引是如何影響數據庫性能的?
當爲一個集合創建索引時,集合所在的數據庫在索引建立完成之前是不允許讀和寫操作的。如果你想要建立一個大型的索引,你應該考慮在後臺建立索引和在副本集上建立索引。

三、如何查看在一個集合上都有哪些索引?
用db.collection.getIndexes()方法

四、如何查看一條查詢語句是否應用了索引?
用explain()方法檢查MongoDB 如何處理一條查詢。

五、如何確定應該在哪些字段上建立索引?
在哪些字段上建立索引有很多決定因素,包括選擇率(選擇率是一個查詢利用索引縮小結果集的能力)、多查詢模型的支持(query shape是指查詢謂詞、排序和投影規範的組合)、索引的大小。

六、如何查看索引的大小?
db.collection.stats()包含集合上每一個索引的大小信息。

七、寫操作如何影響索引?
寫操作有可能會更新索引。
如果寫操作更改了一個索引字段,MongoDB 會更新將更改字段作爲key的所有索引。
當使用MMAPv1存儲引擎時,如果一個更新操作引起一個文檔的大小超過爲其分配的記錄大小,MongoDB 會將該文檔轉移到一個新的記錄中,此時就需要更新與該文檔有關的所有索引,不管字段的修改。
所以,如果你的應用寫操作很頻繁,索引就會影響性能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章