>  기사  >  데이터 베이스  >  laravel 및 mysql에서 쿼리 최적화

laravel 및 mysql에서 쿼리 최적화

王林
王林원래의
2024-07-16 12:03:00373검색

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. 쿼리 빌더 사용 복잡한 쿼리의 경우 Query Builder가 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.