的查詢速度慢得多在具有SSD,2個CPU和2GB RAM的Ubuntu 14服務器上,以下查詢需要80多秒(!)。蒙戈2.4.10,並用收集〜400K記錄:
db.content.find({
"$or": [
{
"cik": {
"$in": [
"0000794367",
"0000867773"
]
}
},
{
"companiesDetected.ids": {
"$in": [
"biFrixuF7BCyrng6p",
"cbCrZSEzHYnPa2PwA"
]
}
}
]
}).limit(100).sort({"pubDate": -1, "title": 1})
我有指標上cik
,companiesDetected.ids
,pubDate
,title
,並在{"pubDate": -1, "title": 1}
一個複合索引。這裏是explain()
:
{
"cursor": "BtreeCursor pubDate_-1_title_1",
"indexBounds": {
"pubDate": [
[
{
"$maxElement": 1
},
{
"$minElement": 1
}
]
],
"title": [
[
{
"$minElement": 1
},
{
"$maxElement": 1
}
]
]
},
"indexOnly": false,
"isMultiKey": false,
"millis": 87903,
"n": 44,
"nChunkSkips": 0,
"nYields": 455,
"nscanned": 406421,
"nscannedAllPlans": 406421,
"nscannedObjects": 406421,
"nscannedObjectsAllPlans": 406421,
"scanAndOrder": false,
"server": "localhost:27017"
}
這裏有什麼問題?
如果我將查詢拆分成組成$or
的兩個條件,則每個時間都小於100ms。
我添加了索引{"cik":1,"companiesDetected.ids":1,"pubDate": -1, "title": 1}
在dark_shadow's suggestion和查詢的explain
需要111秒。立即重新查詢沒有explain
需要101秒(連續兩次)。沒有這種排序,它需要33毫秒(!)。
如果您重新運行第一個查詢,它是否具有相同的行爲? – xlembouras
對不起,我沒有看到你的排序 – Sammaye
@Sammaye我有興趣看到查詢的解釋a)沒有排序和b)與其他索引的用法。 – xlembouras