** UPDATE **MongoDB中的指標如何呈現查詢慢?
我張貼的答案,因爲它是被證實是一個問題
** ORIGINAL **
首先,我向你道歉 - 我剛開始昨天使用MongoDB,而且我在這方面還很新。我有一個非常簡單的查詢,並使用PHP我發現此:
蒙戈的版本是2.0.4,在CentOS 6.2上運行(決賽)64
$start = microtime(true);
$totalactive = $db->people->count(array('items'=> array('$gt' => 1)));
$end = microtime(true);
printf("Query lasted %.2f seconds\n", $end - $start);
沒有索引,則返回:
Query lasted 0.15 seconds
我有28萬條記錄在人們的數據庫。所以我想加入的「項目」的指標應該是有幫助的,因爲我查詢數據很多。但對我的不信,加入索引後,我得到了這個:
Query lasted 0.25 seconds
我做錯了什麼?
相反計數的,我用的發現得到解釋,這是輸出:
> db.people.find({ 'items' : { '$gte' : 1 } }).explain();
{
"cursor" : "BtreeCursor items_1",
"nscanned" : 206396,
"nscannedObjects" : 206396,
"n" : 206396,
"millis" : 269,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"items" : [
[
1,
1.7976931348623157e+308
]
]
}
}
如果我改變我的查詢是「$ NE」 0,它需要更多的10ms的!
這裏是收集統計:
> db.people.stats()
{
"ns" : "stats.people",
"count" : 281207,
"size" : 23621416,
"avgObjSize" : 84.00009957077881,
"storageSize" : 33333248,
"numExtents" : 8,
"nindexes" : 2,
"lastExtentSize" : 12083200,
"paddingFactor" : 1,
"flags" : 0,
"totalIndexSize" : 21412944,
"indexSizes" : {
"_id_" : 14324352,
"items_1" : 7088592
},
"ok" : 1
}
我有免費的RAM爲1GB,所以我相信指數裝入內存。
這裏的人指數,如要求:
> db.people.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "stats.people",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"items" : 1
},
"ns" : "stats.people",
"name" : "items_1"
}
]
這真的很有趣。嘗試使用linux'time'命令來定時多次迭代。 – 2012-04-13 02:49:26
你在使用什麼版本的MongoDB? – Thilo 2012-04-13 02:57:12
增加了版本,thx – ruinernix 2012-04-13 03:01:30