laravelとmysqlでクエリを最適化する

王林
リリース: 2024-07-16 12:03:00
オリジナル
409 人が閲覧しました

optimize query in laravel and mysql

Laravel で大規模なデータセットのクエリを最適化するには、パフォーマンスと効率を向上させるためのいくつかの戦略が必要です。使用できる重要なテクニックをいくつか紹介します:

  1. Eloquent を効率的に使用する 特定の列を選択: 取得するデータの量を最小限に抑えるために必要な列のみを選択します。
$users = User::select('id', 'name', 'email')->get();

ログイン後にコピー

Eager Loading: N+1 クエリの問題を防ぐために、Eager Loading を使用します。

$users = User::with('posts', 'comments')->get();
ログイン後にコピー
  1. クエリビルダーを使用する 複雑なクエリの場合、クエリ ビルダーは Eloquent よりも効率的です。
$users = DB::table('users')->where('status', 'active')->get();
ログイン後にコピー
  1. ページネーション すべてのレコードを一度に取得するのではなく、ページネーションを使用してデータをチャンクに分けてロードします。
$users = User::paginate(50);
ログイン後にコピー
  1. インデックス作成 データベース テーブルの、頻繁にクエリされる列に適切なインデックスが設定されていることを確認してください。
Schema::table('users', function (Blueprint $table) {
    $table->index('email');
});
ログイン後にコピー
  1. チャンク化 大規模なデータセットを処理する場合は、チャンク化を使用してレコードをより小さな部分に処理します。
User::chunk(100, function ($users) {
    foreach ($users as $user) {
        // Process each user
    }
});
ログイン後にコピー
  1. キャッシュ データベースの負荷を軽減するために、頻繁に実行されるクエリの結果をキャッシュします。
$users = Cache::remember('active_users', 60, function () {
    return User::where('status', 'active')->get();
});
ログイン後にコピー
  1. 複雑な操作には生のクエリを使用する 非常に複雑なクエリの場合は、生の SQL を使用した方が効率的な場合があります。
$users = DB::select('SELECT * FROM users WHERE status = ?', ['active']);
ログイン後にコピー
  1. データベース構成の最適化 データベースが最適なパフォーマンスを実現するように構成されていることを確認してください:
  • メモリ制限を増やします。
  • バッファ/キャッシュ サイズを調整します。
  • 適切なストレージ エンジンを使用します。
  1. クエリのプロファイリングと分析 Laravel のクエリ ログを使用してクエリを分析し、プロファイリングします。
DB::enableQueryLog();
// Run your query
$users = User::all();
$queries = DB::getQueryLog();
dd($queries);
ログイン後にコピー
  1. N+1 問題を回避する ループ内で追加のクエリを実行していないことを確認してください。
// Bad: N+1 problem
$users = User::all();
foreach ($users as $user) {
    echo $user->profile->bio;
}

// Good: Eager loading
$users = User::with('profile')->get();
foreach ($users as $user) {
    echo $user->profile->bio;
}
ログイン後にコピー

複雑なクエリの最適化
ユーザーの投稿やコメントを取得する必要があり、この操作を最適化したいとします。

$users = User::select('id', 'name', 'email')
    ->with(['posts' => function ($query) {
        $query->select('id', 'user_id', 'title')
              ->with(['comments' => function ($query) {
                  $query->select('id', 'post_id', 'content');
              }]);
    }])
    ->paginate(50);
ログイン後にコピー

以上がlaravelとmysqlでクエリを最適化するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート