4

テーブルをクエリして、それらの ID がテーブルで使用可能かどうかを確認する必要がある ID の膨大なリストがあり、使用可能な場合はそのモデルをフェッチします。

数千の ID があるため、CActiveRecord::find() メソッドを使用しているため、このプロセスは非常に遅くなります。

元。$book = Book::model()->find('book_id=:book_id', array(':book_id'=>$product->book_id));

考えられるすべてのキーにインデックスを付けましたが、まだ改善されていません。実行速度を改善するための提案はありますか?

前もって感謝します :)

4

2 に答える 2

2

Yiiクエリを実行するたびにスキーマをフェッチするため、スキーマ キャッシュを使用する方が適切です。これにより、クエリのパフォーマンスが向上します。

ファイルでいくつかの構成を行うことにより、スキーマのキャッシュを有効にすることができconfig/main.phpます。

return array(
    ......
    'components'=>array(
        ......
        'cache'=>array(
            'class'=>'system.caching.CApcCache', // caching type APC cache
        ),

        'db'=>array(
            ...........
            'schemaCachingDuration'=>3600, // life time of schema caching
        ),
    ),
);

もう1つ、テーブルの特定の列をフェッチしてパフォーマンスを向上させることができます。

CDbCriteriaのfindメソッドを使って行うことができますCActiveRecord

$criteria = new CDbCriteria;
$criteria->select = 'book_id';
$criteria->condition = 'book_id=:book_id';
$criteria->params = array(':book_id'=>$product->book_id);
$book = Book::model()->find($criteria);

nosql何千ものレコードを処理している場合は、適切であれば任意のデータベースを使用することをお勧めします。

于 2012-10-09T04:35:18.293 に答える