0

Doctrine 1.2 で簡単なクエリを実行します。

これがクエリです。

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

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


誰でも、より良いパフォーマンスを得るための解決策を持っています。
ありがとう

4

1 に答える 1

3

アプリのベンチマークを行ったところ、Doctrine_Core::HYDRATE_ARRAY を使用すると大きな違いが生じることがわかりました。ビューでのみ使用する場合、これは多くの場合理にかなっています。

より複雑なネストされたセットが必要な場合は、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)

Xdebug プロファイリングは、Ubuntu を使用している場合に非常に役立ちます。

sudo apt-get インストール 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 を使用して出力を確認します。

于 2011-01-07T21:44:55.357 に答える