我正在MongoDB中开发一个应用程序CakePHP。我的数据库中有 145,000 记录。当我使用以下命令查询记录时,它需要 12秒。这对我的申请非常糟糕。
$params= array('aggregate'=>array(
array('$project'=>array('as'=>1,'pid'=>1,'st'=>1)),
array('$unwind'=>'$as'),
array('$match' => array('pd'=>array('$gt'=>$f,'$lt'=>$t),'pid'=>$project_id)),
array('$group'=>array('_id'=>'$as')),
array('$sort'=>array('_id'=>1)),
array('$limit'=>10)
)
);
$results = $this->Detail->find('all',array('conditions'=>$params));
任何人都可以帮我减少查询时间。
我的上的索引为&的 PID 即可。我的系统RAM是1.5GB。
我得到了以下数据
[1] => Array
(
[Detail] => Array
(
[_id] => Array
(
[0] => "superfone" Llc,moscow,ru
)
)
)
[2] => Array
(
[Detail] => Array
(
[_id] => Array
(
[0] => "superphone" Llc,moscow,ru
)
)
)
答案 0 :(得分:0)
在执行查找之前,请确保将递归级别设置为您需要的级别,然后报告您的性能。
$this->Detail->recursive = -1; // no joins
results = $this->Detail->find('all',array('conditions'=>$params));
或
$this->Detail->recursive = 0; // data + domain
results = $this->Detail->find('all',array('conditions'=>$params));
不确定您需要什么级别的递归,因此请给他们一个测试,但默认值为1,这可能是一项代价高昂的练习。
<强> REF 强> http://book.cakephp.org/2.0/en/models/model-attributes.html#recursive
该引用还表示将-1设置为默认值,并根据需要提高递归级别,这可以通过将以下内容添加到AppModel来完成
public $recursive = -1;