我有一個OR查詢,我目前正在使用一個半大的更新。基本上我的收藏被分成兩個數據集;MongoDB或條件索引
1個主存儲庫和1個主存儲庫子集。這只是爲了更快地搜索一小部分數據。
但是我發現我創建的東西拉入子集的查詢是超時..當查看解釋它看起來像兩個查詢實際上正在發生。
PRIMARY> var date = new Date(2012,05,01);
PRIMARY> db.col.find(
{"$or":[
{"date":{"$gt":date}},
{"keywords":{"$in":["Help","Support"]}}
]}).explain();
這將產生:
{
"clauses" : [
{
"cursor" : "BtreeCursor ldate_-1",
"nscanned" : 1493872,
"nscannedObjects" : 1493872,
"n" : 1493872,
"millis" : 1035194,
"nYields" : 3396,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"ldate" : [
[
ISODate("292278995-01--2147483647T07:12:56.808Z"),
ISODate("2012-06-01T07:00:00Z")
]
]
}
},
{
"cursor" : "BtreeCursor keywords_1 multi",
"nscanned" : 88526,
"nscannedObjects" : 88526,
"n" : 2515,
"millis" : 1071902,
"nYields" : 56,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"keywords" : [
[
"Help",
"Help"
],
[
"Support",
"Support"
]
]
}
}
],
"nscanned" : 1582398,
"nscannedObjects" : 1582398,
"n" : 1496387,
"millis" : 1071902
}
有什麼我可以更好地索引,使這個更快?似乎只是緩慢的方式...
提前感謝!
你的索引是什麼?只是提交日期? – RameshVel
我試着在關鍵字和日期上創建單獨的索引;並試圖將它們創建爲兩者的複合索引。 – Petrogad
嗯你正在那裏獲取1.4m記錄....這是很多,你可以嘗試在mongo光標上延長計時器來處理這麼大的查詢。你在這裏還有什麼設置?17m是很長的時間,我承認 – Sammaye