2011-08-22 78 views
1

在蒙戈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 
+0

它掃描了80百萬個文件,需要很多時間) –

+0

@Hohhi爲什麼?我添加了一個索引。你能解釋完整的掃描嗎? – JohnJohnGa

+0

這是它在日誌中寫的:nscanned:80089670 –

回答

1

我犯了一個錯誤 - 在mongoDb中都區分大小寫。

我在yyy而不是YYY上添加了一個索引。

即使我在表中沒有任何名稱爲yyy並且索引已成功創建,也沒有警告消息:(。

我重新創建了正確的列名稱上的索引。現在一切都很快。

1

遊標的大小以字節爲單位返回它的大小。你應該感興趣的是爲了防止所有的掃描是文件的數量。使用這段代碼:

collection.FindAll().Count(); 
+0

+1提示 - 看看我的回答:(:) – JohnJohnGa