1. ホーム
  2. mysql

[解決済み] Laravel Eloquent vs query builder - なぜeloquentを使うとパフォーマンスが落ちるのか [終了しました]

2023-02-21 02:04:06

質問

Laravelのクエリビルダとeloquentのパフォーマンステストをしてみました。クエリビルダーの方が、様々なSQL文(select-update-delete-insert)で高速に動作しました。

だから私の質問は:なぜ誰かがプレーンクエリビルダに対してLaravelのEloquentを使用していますか?

どのように解決するには?

EloquentはLaravelのActive Recordパターンの実装であり、その長所と短所をすべて備えています。

アクティブレコードは、CRUD方式で単一のエンティティを処理するのに適したソリューションです。つまり、プロパティを埋めて新しいエンティティを作成し、それをデータベースに保存したり、データベースからレコードをロードしたり、削除したりすることができます。

ダーティチェック(変更されたフィールドのみSQL UPDATEを送信する)、モデルイベント(例えば、誰かが新しいアカウントを作成したときに管理アラートを送信したり統計カウンターを更新する)、特性(タイムスタンプ、ソフト削除、カスタム特性)、イージー/レイジーロードなどのEloquentの機能から多くの利益を得ることができます。また、ドメイン駆動型パターンを適用し、Active Recordエンティティにビジネスロジックの一部を実装することもできます。例えば、検証、リレーションの管理、計算などです。

しかし、すでにご存知のように、Active Recordはいくつかのパフォーマンス上の代償を伴います。

単一のレコードまたは少数のレコードを処理する場合は、何も心配することはありません。しかし、たくさんのレコードを読み込む場合(データグリッド、レポート、バッチ処理など)には、プレーンなLaravelの DB メソッドはより良いアプローチです。

私たちのLaravelベースのアプリケーションでは、私たちが適切と考える両方のアプローチを使用しています。UIフォームにはLaravelのEloquentを使用し、1つのレコードを処理するために DB メソッド(データベースエンジン特有のパフォーマンスを調整したSQLビューに支えられた)を使用して、UIテーブルやエクスポートタスクなどのデータを取得します。また、RESTful APIでもうまく機能します。EloquentでGET、PUT、POST、DELETEにキーと DB キーなしのGETにはEloquentを、フィルタやソート、ページングにはを使用します。