【发布时间】:2014-09-22 23:07:20
【问题描述】:
复合索引中的排序很重要。但是读/写的顺序重要吗? 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中)
- some_dict = {c: "C", a: "A", b: "B"} # 无序。
- some_dict = bson.son.SON({c: "C", a: "A", b: "B"})
没有任何区别,但建议使用 2nd,我不知道为什么。
【问题讨论】:
-
字段顺序在查询对象中无关紧要。我认为如果它这样做会被认为是一个错误,因为它与查询的含义无关。这就是您所说的“在读/写中排序”的意思吗?
-
是的字段顺序。类似于:db.table.find({"a": A, "b": B})
-
@JohnnyHK 用一个例子编辑了我的问题。希望现在更清楚了。