当前位置 : 主页 > 网络安全 > 测试自动化 >

使用性能指数较低的mongodb

来源:互联网 收集:自由互联 发布时间:2021-06-22
我正在使用 mongodb 2.6,我有以下查询: db.getCollection('Jobs').find({ $and: [ { RunID: { $regex: ".*_0" } }, { $or: [ { JobType: "TypeX" }, { JobType: "TypeY" }, { JobType: "TypeZ" }, { $and: [ { Info: { $regex: "Weekly.*" } },
我正在使用 mongodb 2.6,我有以下查询:

db.getCollection('Jobs').find(
{ $and: [ { RunID: { $regex: ".*_0" } }, 
          { $or: [  { JobType: "TypeX" }, 
                    { JobType: "TypeY" }, 
                    { JobType: "TypeZ" }, 
                    { $and: [ { Info: { $regex: "Weekly.*" } }, { JobType: "YetAnotherType" } ] } ] } ] })

我有三个不同的索引:RunID,RunID JobType,RunID JobType Info. Mongo总是只使用包含RunID的索引,虽然其他索引似乎更有可能产生更快的结果,但有时甚至使用由RunID StartTime组成的索引,而StartTime甚至不在使用字段列表中,任何想法为什么它选择那个指数?

注1:

您可以删除前两个索引,RunID和RunID JobType.仅使用扩展的复合索引RunID JobType Info就足够了;这也可用于查询RunID或RunID JobType字段,info here:

In addition to supporting queries that match on all the index fields,
compound indexes can support queries that match on the prefix of the
index fields.

当您删除这些索引时,mongo将选择唯一保留的索引.

笔记2:

你可以随时使用hint,告诉mongo使用特定的索引:

db.getCollection('Jobs').find().hint({RunID:1, JobType:1, Info:1})
网友评论