我研究了mongodb的性能。我有一个包含5亿个文档的集合。我创建了两个索引:
db.appels.createIndex({OPERATEUR_RECEVEUR:1});
db.appels.createIndex({DUREE_APPEL:1});
对于一个字段进行计数,速度很快:
15秒:
db.appels.find ( { "DUREE_APPEL" : { "$gt" : 42 } }).count();
2秒:
db.appels.find({OPERATEUR_RECEVEUR:"MTN"}).count();
但计算两个带有 "and" 的字段会很慢:
7分钟:
db.appels.find ( { $and : [ { "DUREE_APPEL" : { "$gt" : 42 } }, {OPERATEUR_RECEVEUR:"MTN"} ] } ).count();
这是没有字段索引的相同时间。
最后,带有“或”条件的两个字段无法统计:
15小时并终止查询:
db.appels.find ( { $or : [ { "DUREE_APPEL" : { "$gt" : 42 } }, {OPERATEUR_RECEVEUR:"MTN"} ] } ).count();
由于我有100列,所以无法使用多索引。我使用1个带有Debian 8、2个SSD、80 GB RAM、12个CPU和MongoDB 2.4的节点。如何提高速度?