C# MongoDb Find()带索引的完整扫描
在mongo db中C# MongoDb Find()带索引的完整扫描,c#,mongodb,C#,Mongodb,在mongo db中 > show dbs admin (empty) data 23.9423828125GB local (empty) 我有一个带有索引的表: > db.XXX.count(); 80089670 C#: 当我使用C#驱动程序进行查询时: 我得到一个暂停 无法从传输连接读取数据:连接 尝试失败,因为关联方没有正确响应 一段时间后,或建立的连接失败,因为 连接的主机无法响应 在Mongo日志中 Mon Aug 22 10:08:50[conn9]
> show dbs
admin (empty)
data 23.9423828125GB
local (empty)
我有一个带有索引的表:
> db.XXX.count();
80089670
C#:
当我使用C#驱动程序进行查询时:
我得到一个暂停
无法从传输连接读取数据:连接
尝试失败,因为关联方没有正确响应
一段时间后,或建立的连接失败,因为
连接的主机无法响应
在Mongo日志中
Mon Aug 22 10:08:50[conn9]query data.XXX ntoreturn:1 reslen:36
n扫描:80089670{YYY:“1482092”}返回:0 48935ms
可能是什么?何时真正执行查询?为什么我不能得到结果
编辑1:添加新索引
周一8月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%
即使有了新的索引-同样的问题:
Mongo shell:
> printjson(db.XXX.findOne({YYY:"1517077"}));
蒙古族
Mon Aug 22 10:33:40 [conn4] query data.XXX ntoreturn:1 reslen:36 nscanned:80089670 { YYY: "1517077" } nreturned:0 48751ms
游标的大小以字节为单位返回其大小。为了防止所有扫描,您应该感兴趣的是文档的数量。使用以下代码段:
collection.FindAll().Count();
我犯了一个错误-mongoDb中的所有内容都区分大小写 我在
yyy
上添加了索引,而不是yyy
即使我在表中没有名为yyy且索引已成功创建,也没有警告消息:(
我在正确的列名上重新创建了一个索引。现在一切都很快。它扫描了8000万个文档,需要很多时间)@Hohhi为什么?我添加了一个索引。你能解释一下完整扫描吗?这是它在日志中写的:nscanned:80089670可能索引正在上升,你已经设置好了descending@Hohhi-我知道,但怎么可能?我错过什么了吗?如果我们有一个索引,即使表很大,访问时间也应该是O(1)否?
> printjson(db.XXX.findOne({YYY:"1517077"}));
Mon Aug 22 10:33:40 [conn4] query data.XXX ntoreturn:1 reslen:36 nscanned:80089670 { YYY: "1517077" } nreturned:0 48751ms
collection.FindAll().Count();