当我有以下索引时:
1: {"customer" : 1, "orderItems.product" : 1} 2: {"orderItems.product" : 1}
两个计数查询(我使用count来强制查找没有网络传输的所有文件):
a: db.getCollection('order').find({ 'orderItems.product' : DBRef('product',113) }).count() b: db.getCollection('order').find({ 'customer' : DBRef('customer',ObjectId("58de009671571a07540a51d5")), 'orderItems.product' : DBRef('product',113) }).count()
在一组200k上以~0.007秒的相同时间运行。 当我为不同的客户(和不同的产品)添加1000k记录时,它根本不会影响时间。
扩展说明表明:
查询1只使用索引2。 查询2使用索引2但也考虑索引1.这里可能使用索引交集?
因为如果我删除索引1,结果是:
查询a:0.007秒 查询b:0.035秒(5倍长!)
所以我的结论是,通过正确的索引,两种方法的工作速度都很快。但是,如果你不需要复合指数,那只会浪费空间和空间。写速度。
所以: 单场指数更好 在我的情况下。