2011-01-07 4 views
0

Doctrine 1.2で簡単なクエリを実行します。Doctrine 1.2ネストセットは非常に遅いです。どうすれば改善できますか(NestedSet)

ここにクエリがあります。

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

なぜこれが遅いのですか?


誰でも優れたパフォーマンスを得るための解決策があります。私は私のアプリをベンチマークすると
おかげ

答えて

3

私はDoctrine_Core :: HYDRATE_ARRAYを使用すると、大きな違いをしたことがわかりました。 Viewでのみ使用している場合、これはしばしば意味があります。

さらに複雑なネストセットが必要な場合は、Doctrine_Queryを使用するほうがよいでしょう。あなたのUbuntuを使用している場合

$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) 

Xdebugのプロファイリングは、非常に役立ちます:

は何が欲しいのは、おそらくこのようなクエリなものである

須藤はapt-getののphp5-xdebugの

をインストール
次に:

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" 

は、ディレクトリを作成することを忘れないでください:

私が持っているxdebug.iniで3210

はsudo geditの/etc/php5/apache2/conf.d/xdebug.ini

ます。mkdir/tmpに/ xdebugの

にsudo chgrpのWWW-データを/ tmp/xdebugの

chmodコマンド774を/ tmp/xdebugの

は、その後、私は、出力を見てKCachegrindを使用し、これは

+0

に役立ちます願っていますあなたは私のLINQやコードの一部をしてください提供することはできますか?。 –

+0

ありがとうマックス、あなたは私に多くの時間を節約します。 –

関連する問題