mongo语句优化分析

参考原文:http://www.mongoing.com/eshu_explain3

理想的查询状态由以下两种

  普通查询:

  nReturned=totalKeysExamined & totalDocsExamined=0

  (cover index,仅仅使用到了index,无需文档扫描,这是最理想状态。)

  或者

  nReturned=totalKeysExamined=totalDocsExamined(需要具体情况具体分析)

  (正常index利用,无多余index扫描与文档扫描。)

     sort大数据的时候,为了使得sort不在内存中进行

  totalKeysExamined > nReturned=totalDocsExamined 

备注:很多时候改变索引的顺序可以极大的增加查询效率。可以通过explain()来查看执行语句的上面三个数值。

举例:

集合tmp:数据量:2000万

包含字段 long a, enum b, int c

db.tmp.find({ "c" : 181 , "b" : "bType", "a" : { "$gte" : 1473139260000 , "$lte" : 1473225660000})

每一个单独建索引只会使用单个索引。且totalDocsExamined远大于其它两个值

考虑建立多条索引:因为c和b的数目相对较少,因此将b和c放索引前面。a放最后。

可以得到nReturned=totalKeysExamined & totalDocsExamined=0 

项目优化mongo步骤

1. 列出原始日志表与统计表;
2. 列出每个表的查询条件;
3. 列出每个表的索引;
4. 列出查询慢的语句;

原文地址:https://www.cnblogs.com/guochunyi/p/5849783.html