我可以给出相同的键,包括升序和降序索引,如下所示:
db.hw1_1.ensureIndex({answer:-1})
db.hw1_1.ensureIndex({answer:1})
你可以看到他们在后端工作:
{ "v" : 1, "key" : { "answer" : -1 }, "ns" : "m101.hw1_1", "name" : "answer_-1" }
{ "v" : 1, "key" : { "answer" : 1 }, "ns" : "m101.hw1_1", "name" : "answer_1" }
在同一个密钥上同时拥有两个索引顺序是否有意义?
谢谢!
答案 0 :(得分:2)
对此来说真的没有多大意义,因为索引可以同样用于按任意顺序“排序”。也就是说,这样做本质上没有什么可以阻止你创建索引。谁知道,也许你打算在创建另一个之后删除一个。
但是考虑到你要为完全相同的事情维护两个索引,需要考虑额外的写入开销以及明显的额外磁盘空间
但是处理的顺序将同时发挥作用,并且除非特定地“暗示”,否则将始终选择第一个可用的索引。
对于一个实际示例,请创建一些文档:
{ "answer" : 1 }
{ "answer" : 2 }
{ "answer" : 3 }
然后创建一个索引:
db.collection.ensureIndex({ "answer": -1 })
用解释查询:
db.collection.find({},{_id:0}).sort({ answer: -1 }).explain()
当然会选择创建的索引,以及创建另一个索引时:
db.collection.ensureIndex({ "answer": 1 })
使用“升序”排序顺序发出查询:
db.collection.find({},{_id:0}).sort({ answer: 1 }).explain()
您将看到仍然选择了原始的“answer_-1”索引。
所以这完全取决于你如何使用索引。如果您通常希望通过“降序”键获得结果,那么就这样做,或者反过来。