优化 MongoDB 索引(两个字段查询)
Optimizing MongoDB indexing (two fields query)
我在名为 inventory
的 mongodb 集合中有两个字段 scheduledStamp
和 email
。
有以下 jpa 查询:
fun findAllByScheduledStampAfterAndEmailEquals(scheduledStamp:Long,email:String):List<Inventory>
索引此集合的最佳方法是什么?
我希望索引尽可能少,避免不必要的索引。
知道:
这个集合可以有超过百万的条目(需要索引)
查询人:
db.inventory.find({ scheduledStamp: {$gt:1594048295294}})
确定结果很少条目
查询人:
db.inventory.find({ email: "abc@gmail.com"})
确定结果很少条目
如果您只需要支持对电子邮件的查询:索引电子邮件是必须的
如果只需要在scheduledStamp上支持查询:索引scheduledStamp是必须的
如果你想查询两者,需要第三个索引。但是您可以创建一个复合索引来覆盖此查询和上述查询之一。
因为 Mongo 遵循前缀匹配来选择索引:
您可能在 {"email":1} 和 {"scheduledStamp:1","email":1} 上有索引
或
您可能在 {"scheduledStamp":1} 和 {"email:1","scheduledStamp":1} 上有索引
但是因为你说了这些字段 return 很少有文档:
只要在 {"email":1} 和 {"scheduledStamp":1} 上有 2 个索引,即使不是最佳,也可能表现良好。
我在名为 inventory
的 mongodb 集合中有两个字段 scheduledStamp
和 email
。
有以下 jpa 查询:
fun findAllByScheduledStampAfterAndEmailEquals(scheduledStamp:Long,email:String):List<Inventory>
索引此集合的最佳方法是什么?
我希望索引尽可能少,避免不必要的索引。
知道:
这个集合可以有超过百万的条目(需要索引)
查询人:
db.inventory.find({ scheduledStamp: {$gt:1594048295294}})
确定结果很少条目
查询人:
db.inventory.find({ email: "abc@gmail.com"})
确定结果很少条目
如果您只需要支持对电子邮件的查询:索引电子邮件是必须的
如果只需要在scheduledStamp上支持查询:索引scheduledStamp是必须的
如果你想查询两者,需要第三个索引。但是您可以创建一个复合索引来覆盖此查询和上述查询之一。
因为 Mongo 遵循前缀匹配来选择索引:
您可能在 {"email":1} 和 {"scheduledStamp:1","email":1} 上有索引
或
您可能在 {"scheduledStamp":1} 和 {"email:1","scheduledStamp":1} 上有索引
但是因为你说了这些字段 return 很少有文档: 只要在 {"email":1} 和 {"scheduledStamp":1} 上有 2 个索引,即使不是最佳,也可能表现良好。