技巧一、盡量減少磁盤訪問
內存訪問要比磁盤訪問快得多。所以使用優化的本質就是盡可能地減少對磁盤的訪問。
內存的讀取速度要比磁盤速度快一百萬倍。讀磁盤要消耗很長時間。幾種簡單的辦法:
使用SSD(固態硬盤);增加內存可以減少對硬盤的讀取,讓常用的文檔在內存中;
技巧二、使用索引減少內存占用
索引是有序的,所以不必遍歷全部項。當查詢時候會先根據索引查到索引中的結果,然后符合條件的文檔加載到內存中,從而減少內存占用。
技巧三、不要到處使用索引
這里要注意,不是所有的查詢都可以用索引的。索引一般用在返回結果只是總體數據的一小部分的時候。根據經驗,一旦要大約返回集合一半的數據就不要使用索引了。
若是已經對某個字段建立了索引,又想在大規模模糊查詢時候不使用它(因為使用時候可能較低效)可以使用自然排序,用{“$natural”:1}來強制mongodb禁用索引。自然排序就是“按照磁盤上的存儲順序返回數據”,這樣mongodb就不會使用索引了。
技巧四、索引覆蓋查詢
如果只想返回某些字段且所有這些字段都可放在索引中,mong odb可以做索引覆蓋查詢(covered index query),這種查詢不會訪問指針指向的文檔,二是直接用索引的數據返回結果。
例如: db.foo.ensuIndex({x:1, y :1,z:1})
現在查詢被索引的字段,并只要求返回這些字段,mongodb就沒必要加載整個文檔。
db,foo.find({x: ceriteria, y: ceriteria})
這樣的查詢僅僅訪問了索引的數據,而沒有訪問整個集合的數據;
技巧五、使用復合索引加快多個查詢
查詢只要和索引開頭部分匹配就能利用索引,所以創建索引時要考慮這些查詢依賴的所有字段。并且根據各個字段查詢的頻率定義索引字段順序;
技巧六、通過建立分級文檔加快掃描
將數組組織有層次話,不僅可以讓其看著更有條理,還可以讓mongodb在偶爾沒有索引時候也能快速查詢。
如果文檔沒有層次結構的話,mongodb必須遍歷文檔中的每個字段。合理使用層次可以減少mongodb對字段的訪問。
技巧七、AND型查詢要點
假設要查詢滿足條件A,B和C的文檔,滿足A的文檔有4萬,滿足B的有9K,滿足C的是200,那么應該用C and B and A 這樣只需要查詢200條記錄。
這就是說要是已知某個查詢條件更加苛刻,那要將放置在最前面;
技巧八:OR型查詢要點
OR型查詢與AND查詢恰好相反,匹配最多的查詢語句放在最前面,因為Mongodb每次都要匹配不在結果集中的文檔。
新聞熱點
疑難解答