不仅是查询条件的索引问题,而且你还要在建立索引同时建立索引排序,不要在查询的时候去排序!!!!不知.net可不可以这样建索引:coll.MetaData.CreateIndex(new Document() { { "code ", 1 } }, false).Ascending();
不过,不管是什么语言,你都可以直接在mongodb下输入命令行来测试,以下的mongodb命令行下的测试:
> db.test.find({h:/code/}).explain()
{
"cursor" : "BtreeCursor h_-1 multi",
"isMultiKey" : false,
"n" : 938,
"nscannedObjects" : 938,
"nscanned" : 136348,
"nscannedObjectsAllPlans" : 938,
"nscannedAllPlans" : 136348,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 244,
"indexBounds" : {
"h" : [
[
/code/,
/code/
],
[
{
},
""
]
]
},
"server" : "test:27017"
}
说明:集合test有136348条数据,使用正则查h字段,查到有匹配938条数据,"millis" : 244,表示所花时间为244毫秒,“indexBounds”表示所用索引为"/code/","scanAndOrder" : false,表示没有进行排序,是因为我在写索引的时候已经排序好了,如果它为true,那么所花时间将更多。由于我使用的是正则查询,要遍历集合一遍,所花时间肯定比较长,但如果你只是在100万条数据里查一个匹配:db.test.find({'h':'code'}).explain(),所花时间为0.
|