MongoDB技巧——不要到處使用索引
上面的介紹使你驚歎於索引的強大作用,但要提醒你,不是所有查詢都可以用索引 的。比如,在剛才的例子中,要是需要返回集合中90% 的文件而非獲取一些記錄, 就不應該用索引。
如果對這種查詢用了索引,結果就是幾乎遍歷整個索引樹,把其中一部分,比方說 60 GB 的索引都載入到記憶體。然後按照索引中的指標載入集合中230 GB 的文件數 據。最終將載入230 GB + 60 GB =290 GB,比不用索引還多。
所以,索引一般用在返回結果只是總體資料的一小部分的時候。根據經驗,一旦要 大約返回集合一半的資料就不要使用索引了。
若是已經對某個欄位建立了索引,又想在大規模查詢時不使用它(因為使用索引可能 會較低效),可以使用自然排序,用{"$natural" : 1} 來強制MongoDB 禁用索引。 自然排序就是“按照磁碟上的儲存順序返回資料”,這樣MongoDB 就不會使用索引了:
db.foo.find().sort({"$natural" : 1})
如果某個查詢不用索引,MongoDB 會做全表掃描,即逐個掃描文件,遍歷整個集 合,以找到結果。
寫入速度
每當增加、刪除、更新記錄,所有相應的索引也必須更新。插入文件時,MongoDB 需要找到文件中的值在每一個索引樹中的位置,然後在那兒插入。刪除時,要找到 樹中的索引項並刪除。更新時,也可能像插入時那樣新建索引項,也可能像刪除時 那樣刪除索引項,若是值更新了就會既有新增又有刪除。所以,索引會增加很多額 外的寫入。
相關文章
- MongoDB索引實戰技巧MongoDB索引
- mongodb索引使用MongoDB索引
- mongodb 重複建立索引不報錯MongoDB索引
- MongoDB 索引MongoDB索引
- mongodb索引MongoDB索引
- [zt] SQLSERVER索引的使用技巧SQLServer索引
- mongoDB的索引MongoDB索引
- MongoDB索引概述MongoDB索引
- MongoDB之索引(地理資訊索引)MongoDB索引
- MongoDB之索引(全文索引)MongoDB索引
- MongoDB之索引(過期索引)MongoDB索引
- MongoDB之索引(唯一索引)MongoDB索引
- mysql索引使用技巧及注意事項MySql索引
- MongoDB索引,效能分析MongoDB索引
- MongoDB正規表示式在索引中的使用MongoDB索引
- mongodb 如何檢視索引MongoDB索引
- MongoDB ( 五 )高階_索引MongoDB索引
- MongoDB之索引(簡介)MongoDB索引
- 快速掌握mongoDB(三)——mongoDB的索引詳解MongoDB索引
- 【MongoDB學習筆記】MongoDB索引那點事MongoDB筆記索引
- MongoDB系列一(索引及C#如何操作MongoDB)MongoDB索引C#
- MongoDB索引優化詳解MongoDB索引優化
- MongoDB中的定時索引MongoDB索引
- 005.MongoDB索引及聚合MongoDB索引
- MongoDB索引的簡單理解MongoDB索引
- MongoDB慢查詢與索引MongoDB索引
- MongoDB複合索引詳解MongoDB索引
- Hadoop技巧系列索引Hadoop索引
- chrome使用技巧(看了定不讓你失望)Chrome
- 【Mongo】MongoDB索引管理-索引的建立、檢視、刪除MongoDB索引
- MongoDB設計方法及技巧MongoDB
- Mysql索引的使用 - 組合索引 + 範圍條件的處理MySql索引
- MongoDB索引與優化詳解MongoDB索引優化
- mongodb資料庫如何建立索引?MongoDB資料庫索引
- MongoDB中複合索引結構MongoDB索引
- MongoDB如何在後臺建立索引MongoDB索引
- sql優化案例一:使用了表示式不會使用索引SQL優化索引
- MongoDB故障處理MongoDB