Doctrine 1.2 Nested Set真的很慢。我怎样才能改进它。(NestedSet)

时间:2011-01-07 21:22:42

标签: zend-framework nested-sets doctrine-1.2

我使用Doctrine 1.2执行简单查询。

这是查询。

$cat = Doctrine_Core::getTable('Model_Category')->find($CatID);
if( isset($cat) && $cat->getNode()->hasChildren())
            $this->view->CategoryTree = $cat->getNode()->getChildren();

为什么这么慢?。


任何人都有解决方案来获得更好的性能。
感谢

1 个答案:

答案 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查看输出,希望这有帮助