使用PHP进行简单查询的mongo查询速度慢

时间:2012-09-09 00:44:20

标签: performance mongodb

我有一个非常简单的Mongo Query,我正在使用PHP执行。

我相信查询执行得非常快,因为当我在终端上运行它时,它几乎立即完成,当我解释时()它表明它在1-2ms内执行。

然而,当我去迭代光标并将内容放入数组时,它会减慢大时间,大约需要1秒钟来迭代几条记录。

它使用索引,索引将扫描的对象缩减为它返回的少数文档。

我在这个数据库上运行的其他非常类似的查询完全快了1000倍。

以下是explain()的结果:

cursor (String, 18 characters ) BtreeCursor vsid_1
nscanned (Integer) 7
nscannedObjects (Integer) 7
n (Integer) 7
scanAndOrder (Boolean) TRUE
millis (Integer) 2
nYields (Integer) 0
nChunkSkips (Integer) 0
isMultiKey (Boolean) FALSE
indexOnly (Boolean) FALSE
indexBounds (Array, 1 element)

    vsid (Array, 1 element)
        0 (Array, 2 elements)
            0 (String, 32 characters ) e11d0d96958a473e261933516489158c
            1 (String, 32 characters ) e11d0d96958a473e261933516489158c

allPlans (Array, 4 elements)
oldPlan (Array, 2 elements) 

正如您所看到的,它正在使用适用于此查询的“vsid”索引。这个集合的大小不小,但也不大(约250,000条记录)。

当我执行查询时,我只是使用一个非常简单的迭代循环它将它放入一个数组中:

foreach ($cursor as $obj) {
  $vhit[] = $obj;
}

执行每次迭代的实际时间只有几分之一毫秒。查询的执行最多为2毫秒。但是进入“foreach”循环的过程会导致1秒的延迟。

有什么想法吗?

编辑:服务器运行大约8 GIG的RAM,但整个数据库只有745 MB,所以它应该能够将整个数据库安装在RAM中。

0 个答案:

没有答案