今天我遇到了这个问题,我的 MongoDB 查询速度非常慢并且超时。我发布了这个问题 -MongoDB 记录太多? https://stackoverflow.com/questions/11701103/mongodb-too-many-records他的建议是正确的,我必须确保索引并消除不区分大小写。我在 Mongo shell 中尝试过,效果很好。
然而,当我通过 PHP 运行它时,它仍然是一样的:(
然后我意识到查询对“id”(不是 _id)字段进行了排序,当我删除它时,事情变得非常快。但对于排序来说,速度真的很慢。我已经在 id 字段上有一个索引。
顺便说一句,这是查询:
db.tweet_data.find({
... $or:
... [
... { in_reply_to_screen_name: /^kunalnayyar$/, handle: /^kaleycuoco$/, id: { $gt: 0 } },
... { in_reply_to_screen_name: /^kaleycuoco$/, handle: /^kunalnayyar$/, id: { $gt: 0 } }
... ],
... in_reply_to_status_id_str: { $ne: null }
...
... } ).sort({id:-1})explain()
所以我的索引是:(不是复合的){ {id:-1} , {handle:1}, {in_reply_to_screen_name:1} }
经过一番阅读后,我意识到它应该是一个复合索引,我尝试了两种变体但没有成功:
1.{handle:1, in_reply_to_screen_name:1, id:-1}
2. {id:-1,handle:1, in_reply_to_screen_name:1}
我不确定哪里出了问题,但我很确定问题出在索引上。我太忙了,无法理解要索引的顺序和字段