以下是 db.mycoll.find({MY_FIELD:“FALSE”})。explain()返回 -
"cursor" : "BtreeCursor MY_FIELD_1",
"isMultiKey" : false,
"n" : 843392,
"nscannedObjects" : 843392,
"nscanned" : 843392,
"nscannedObjectsAllPlans" : 843392,
"nscannedAllPlans" : 843392,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 17798,
"nChunkSkips" : 0,
"millis" : 636733,
"indexBounds" : {
"MY_FIELD" : [
[
"FALSE",
"FALSE"
]
]
},
"server" : "db-2:30000",
"filterSet" : false
这是 db.mycoll.stats()返回的内容 -
"ns" : "810.mycoll",
"count" : 1052404,
"size" : 4052704096,
"avgObjSize" : 3850,
"storageSize" : 4841168896,
"numExtents" : 24,
"nindexes" : 5,
"lastExtentSize" : 1257897984,
"paddingFactor" : 1,
"systemFlags" : 1,
"userFlags" : 1,
"totalIndexSize" : 215903632,
"indexSizes" : {
"_id_" : 38484432,
"fieldA_1" : 42155456,
"fieldB_1_MY_FIELD_1" : 54255936,
"fieldC_1" : 42343504,
"MY_FIELD_1" : 38664304
},
"ok" : 1
我的证词是 -
我知道的东西 -
这是 mongostat 数据
insert query update delete getmore command flushes mapped vsize res faults locked db idx miss % qr|qw ar|aw netIn netOut conn time
*0 7 436 *0 0 7|0 0 304g 610g 2.12g 40 810:5.6% 0 0|0 3|1 257k 521k 21 20:39:35
*0 1 179 *0 0 3|0 0 304g 610g 2.12g 11 810:0.0% 0 0|0 1|1 99k 520k 21 20:39:36
*0 *0 53 *0 0 3|0 0 304g 610g 2.12g 3 1273:8.7% 0 1|0 1|1 28k 1m 22 20:39:37
*0 *0 805 *0 0 2|0 0 304g 610g 2.12g 44 810:0.0% 0 1|1 2|1 440k 519k 21 20:39:39
*0 2966 112 *0 0 1|0 0 304g 610g 2.12g 12 810:2.6% 0 0|0 1|1 63k 518k 21 20:39:40
*0 1 398 *0 0 1|0 0 304g 610g 2.12g 9 810:0.0% 0 1|0 1|1 238k 520k 21 20:39:41
*0 *0 987 *0 0 1|0 0 304g 610g 2.13g 101 810:0.0% 0 1|2 2|1 612k 518k 21 20:39:42
*0 11 86 *0 0 10|0 0 304g 610g 2.13g 17
答案 0 :(得分:1)
虽然查询可能使用索引,但构建文档需要时间。 explain
显示"indexOnly" : false
,这意味着索引不是覆盖索引(请参阅http://docs.mongodb.org/manual/reference/method/cursor.explain)。
你可以试试这个。如果您将查询更改为:
db.mycoll.find( {MY_FIELD: "FALSE"}, {_id: 0, MY_FIELD: 1} ).explain()
然后MY_FIELD
本身的索引可用于构建结果。检查这是否运行得更快。显然,这个查询可能对你没有多大用处,因为这不会给你返回文件。这只是为了弄清楚是否花费了时间来构建文档而不是搜索本身。
此外,如果MY_FIELD
只有两个值,那么最好使用布尔值而不是字符串。文档大小和索引会更小。