我使用Doctrine 1.2执行简单查询。
这是查询。
$cat = Doctrine_Core::getTable('Model_Category')->find($CatID);
if( isset($cat) && $cat->getNode()->hasChildren())
$this->view->CategoryTree = $cat->getNode()->getChildren();
为什么这么慢?。
任何人都有解决方案来获得更好的性能。
感谢
答案 0 :(得分:3)
当我对我的应用进行基准测试时,我发现使用Doctrine_Core :: HYDRATE_ARRAY产生了很大的不同。当仅在View中使用时,这通常是有意义的。
如果您需要更复杂的嵌套集,那么使用Doctrine_Query可能是更好的选择。
你想要的可能是这样的查询:
$query = Doctrine_Query::create();
$query->from('Model_Category cat')
->leftJoin('cat.Node n')
->leftJoin('n.Childre c')
->where('count(c.id) > 0')
->andWhere('cat.id = ?', $id);
$query->execute(array(1), Doctrine_Core::HYDRATE_ARRAY)
如果您使用Ubuntu,Xdebug分析可能非常有用:
sudo apt-get install php5-xdebug
然后:
sudo gedit /etc/php5/apache2/conf.d/xdebug.ini
在xdebug.ini中我有:
zend_extension=/usr/lib/php5/20090626+lfs/xdebug.so
xdebug.profiler_enable=on
xdebug.profiler_output_dir="/tmp/xdebug"
xdebug.profiler_output_name = "cachegrind.out.%H.%R.%t"
请记住创建目录:
mkdir / tmp / xdebug
sudo chgrp www-data / tmp / xdebug
chmod 774 / tmp / xdebug
然后我使用KCachegrind查看输出,希望这有帮助