引用 docs :
When creating an index, the number associated with a key specifies the direction of the index, so it should always be 1 (ascending) or -1 (descending). Direction doesn't matter for single key indexes or for random access retrieval but is important if you are doing sorts or range queries on compound indexes.
但是,我认为没有理由说明索引方向对复合索引很重要。有人可以提供进一步的解释(或示例)吗?
最佳答案
MongoDB 以某种方式连接复合键并将其用作 BTree 中的键。
查找单个项目时 - 树中节点的顺序无关紧要。
如果您要返回一系列节点 - 彼此靠近的元素将位于树的相同分支下。节点在范围内越近,检索它们的速度就越快。
使用单个字段索引 - 顺序无关紧要。如果它们按升序排列,它们也将按降序排列。
当您拥有复合键时 - 顺序开始变得重要。
例如,如果键是 A 升序 B 升序,则索引可能如下所示:
Row A B 1 1 1 2 2 6 3 2 7 4 3 4 5 3 5 6 3 6 7 5 1
对 A 升序 B 降序的查询将需要乱序跳转索引以返回行,并且会更慢。例如它将返回行 1, 3, 2, 6, 5, 4, 7
与索引顺序相同的范围查询只会以正确的顺序依次返回行。
在 BTree 中查找记录需要 O(Log(n)) 时间。按顺序查找记录范围只需 OLog(n) + k,其中 k 是要返回的记录数。
如果记录乱序,代价可能高达OLog(n) * k
https://stackoverflow.com/questions/10329104/