我有一个疑问:
db.content.find({ "$or" : [ { "cik" : "0000764839"} , { "entitiesDetected.ids" : "ZqH9BvtitcYR88NKC"}], "pubDate" : { "$gt" : { "$date" : -2206281600000}}, "orderBy": {"pubDate": -1, "title": 1}}).explain()
根据 MMS 配置文件,在生产中需要 76 秒才能将数据返回给客户端。
但是当我在 Mongo shell 中运行相同的查询时,我得到了 12 的 nscanned,而且速度超快 - 7 毫秒。
那么到底是什么问题呢?我问过 MMS 人员我的 MMS 个人资料中是否存在明显问题,他们似乎并不认为有什么明显问题。我现在很困惑。
我在 Linode 2048(双核 - 2GB 内存)上使用 Ubuntu 14.04。
答案1
您的驱动程序可能会添加超出索引范围的隐含排序顺序,尤其是当您在任何这些字段上使用复合索引时。您需要.explain()
在应用程序的查询中运行,然后在 mongo shell 查询上运行,并比较两者的输出。您还应该比较应用程序进行查询时记录的日志行与 shell 进行查询时记录的日志行。记下所有索引,尤其是复合索引,以及它们的排序顺序与查询的排序顺序的比较。