在蒙戈DBMongoDB中查找()全掃描與指數
> show dbs
admin (empty)
data 23.9423828125GB
local (empty)
我有一個表與索引:
> db.XXX.count();
80089670
C#:
voteCol.EnsureIndex("({ YYY:1 })");
當我做一個查詢與C#驅動程序:
MongoCollection<BsonDocument> voteCol = database.GetCollection<BsonDocument>("XXX");
var query = new QueryDocument("YYY", DataUtils.getItemInPollIdList());
MongoCursor<BsonDocument> cursor = voteCol.Find(query).SetSortOrder(SortBy.Descending("ZZZ")).SetLimit(10).SetSkip(20);
的執行時間爲這部分代碼是接近0
然後,當我試圖讓光標
cursor.Size();
我得到一個超時的大小。
無法讀取從傳輸連接數據:連接 嘗試失敗,因爲連接的方沒有正確一段時間後應對 ,或已建立的連接失敗,因爲 連接的主機沒有反應。
在蒙戈登錄
週一年08月22十點08分50秒[conn9]查詢data.XXX ntoreturn:1個reslen:36 nscanned:80089670 {YYY: 「1482092」} nreturned:0 48935ms
它可能是什麼?查詢真的執行了嗎?爲什麼我不能得到結果?
編輯1:增加新的索引
即使有新的索引週一年08月22 10點17分38秒[conn12]上建立新的索引{({YYY:-1}):1} 爲data.XXX
4000000/80089670 4% 7866400/80089670 9% 11403000/80089670 14% 15000000/80089670 18% 19000000/80089670 23% 22988600/80089670 28% 26454700/80089670 33% 30000000/80089670 37% 33438600/80089670 41% 37000000/80089670 46% 40810600/80089670 50% 44132200/80089670 55% 48000000/80089670 59% 52000000/80089670 64% 55618300/80089670 69% 59000000/80089670 73% 62170100/80089670 77% 66000000/80089670 82% 70000000/80089670 87% 74000000/80089670 92% 77874500/80089670 97%
- 同樣的問題: 蒙戈外殼:
> printjson(db.XXX.findOne({YYY:"1517077"}));
MongoLog
Mon Aug 22 10:33:40 [conn4] query data.XXX ntoreturn:1 reslen:36 nscanned:80089670 { YYY: "1517077" } nreturned:0 48751ms
它掃描了80百萬個文件,需要很多時間) –
@Hohhi爲什麼?我添加了一個索引。你能解釋完整的掃描嗎? – JohnJohnGa
這是它在日誌中寫的:nscanned:80089670 –