2

私はどこを見ても、この不可解な質問に対する答えを見つけることができませんでした..

createCommand でできるように、Criteria でほとんどすべてのことができます (コードとしては「悪い」ように見えるかもしれませんが)。

私の質問は次のとおりです。パフォーマンスの違いはありますか、それとも同じ結果を得るには2つの方法しかありませんか?

4

2 に答える 2

4

CDbCriteria と createCommand はどちらも、Yii フレームワークでクエリを作成する方法です。この他に、そのような方法を使用せずに mysql クエリを直接実行する必要がある場合もあります。

CDbCriteria を使用して複雑なクエリを作成するのは非常に簡単で、リレーションを使用して結合操作を実行する必要がある場合は createCommand よりも優れています。

ただし、CDbCriteria はいくつかのスキーマ レベルのクエリを実行してテーブルの列をフェッチし、各テーブルに対して、また CDbCriteria を使用するたびに実行されるため、パフォーマンス ベースでは createCommand が CDbCriteria よりも優れています。createCommand は mysql クエリを直接実行しますが、スキーマ レベルのクエリを実行する必要はありません。

パフォーマンスレベルよりもクエリのキャッシュを開始すると、どちらもほぼ同じです。

CDbCriteria の優れた機能の 1 つは、リレーション クエリです。したがって、私は CDbCriteria と Let yii を使用して独自の方法でクエリを処理することを好みます。

于 2012-08-17T05:37:40.183 に答える
2

CDbCriteria は、一部の CDbConnection (一般的には DAO) 機能の一種のカプセル化です。たとえば、ActiveRecord モデルでは、find() などのほとんどのクエリ関数は CDbCriteria オブジェクトを使用して CommandBuilder インスタンスを初期化します。このように、CDbcriteria を使用すると、db コマンドを生成するために実際に PHP を実行する必要があるため、パフォーマンスに実際の違いがあります。ただし、これは無意味ではないと言わざるを得ません。リファレンスは次のように述べています。

Yii DAO はほぼすべてのデータベース関連のタスクを処理できますが、一般的な CRUD (作成、読み取り、更新、および削除) 操作を実行するいくつかの SQL ステートメントを作成するために、私たちの時間の 90% を費やす可能性があります。また、SQL ステートメントが混在している場合、コードを維持することも困難です。これらの問題を解決するために、Active Record を使用できます。

于 2012-08-16T20:45:11.677 に答える