在复合指数中排序很重要。但读/写的顺序是否重要? mongodb足够聪明,可以根据可用的索引重新排序字段吗?
代码在python中。我读到最好使用:http://api.mongodb.org/python/current/api/bson/son.html传递有序词典。
但是在有序和无序字典之间切换之后,我认为没有任何性能差异。对任一选项运行说明,表明它评估了不同的索引(allPlans字段)并且确实选择了其订单与接收查询的方式不同的索引。
如果能够以任何方式证实这一点,我会很高兴。
我正在使用mongo 2.6。可能是mongo在他们的新版本中添加了某种优化。
编辑:(添加示例) 例如:
Index is on {c: 1, a: 1, b: 1}
Intended query: db.tble.find(some_dict)
哪一个更好? (在python中)
两者都没有任何区别,但建议使用2nd,我不知道为什么。
答案 0 :(得分:0)
您在查询中指定字段的顺序,例如
db.collection.find({ "a" : 2, "b" : 4})
VS
db.collection.find({ "b" : 2, "a" : 4})
没关系,因为两个查询之间没有语义差异。在指定复合索引时,字段的顺序很重要,例如
db.collection.ensureIndex({ "a" : 1, "b" : 1})
VS
db.collection.ensureIndex({ "b" : 1, "a" : 1})
因为复合索引只能用于满足有序索引键前缀的查询。这意味着{ "a" : 1, "b" : 1}
上的前一个索引可以满足查询
db.collection.find({ "a" : 33})
但{ "b" : 1, "a" : 1}
上的后一个索引不能。有关更多说明和示例,请参阅compound index docs。