데이터베이스 쿼리 최적화 Laravel: Eloquent 및 인덱스 로 성능 향상

데이터베이스 쿼리를 최적화하는 것은 Laravel 애플리케이션의 최상의 성능과 응답성을 보장하는 데 중요합니다. Laravel 의 Eloquent ORM(Object-Relational Mapping)은 데이터베이스와 상호 작용하는 편리하고 표현적인 방법을 제공합니다. 그러나 최적으로 사용하지 않으면 쿼리 실행 속도가 느려지고 애플리케이션의 효율성에 영향을 미칠 수 있습니다.

다음에서 데이터베이스 쿼리를 최적화하는 몇 가지 기술과 예를 살펴보겠습니다 Laravel.

 

즉시 로딩

즉시 로드를 사용하면 기본 쿼리로 관련 데이터를 검색하여 데이터베이스 쿼리 수를 줄이고 성능을 향상시킬 수 있습니다.

다음 예를 고려하십시오.

// Without eager loading(N + 1 problem)  
$users = User::all();  
foreach($users as $user) {  
    $posts = $user->posts; // Additional queries for each user  
}  
  
// With eager loading  
$users = User::with('posts')->get();  

 

선택적 필드 사용

테이블에서 모든 필드를 가져오는 대신 select 메소드를 사용하여 필수 필드만 지정하십시오. 이렇게 하면 데이터베이스에서 전송되는 데이터의 양이 줄어들고 쿼리 실행 시간이 향상됩니다.

$users = User::select('id', 'name')->get();

 

인덱싱

쿼리에 사용되는 열을 적절하게 인덱싱하면 데이터베이스 조회 속도를 크게 높일 수 있습니다.

예를 들어:

Schema::table('users', function($table) {  
    $table->index('email'); // Indexing the 'email' column for faster lookups  
});  

 

쪽수 매기기

대규모 데이터 세트를 처리할 때 페이지 매김을 사용하여 단일 쿼리에서 검색되는 레코드 수를 제한하십시오.

$posts = Post::paginate(10); // Fetch 10 posts per page

 

쿼리 최적화

쿼리 작성기 메서드를 효과적으로 사용하여 효율적인 쿼리를 만듭니다. 예를 들어 첫 번째 결과만 필요한 경우 first() 대신 를 사용합니다 get().

$firstUser = User::where('age', '>', 18)->first();

 

N+1 문제 방지

N+1 문제는 모델 컬렉션을 검색한 다음 루프 내에서 관련 모델에 액세스할 때 발생합니다. 이를 방지하려면 를 사용하여 관련 모델을 즉시 로드합니다 with.

 

Raw Queries

복잡한 쿼리의 경우 최적의 성능을 위해 매개 변수 바인딩과 함께 원시 SQL 쿼리를 사용하는 것이 좋습니다.

$users = DB::select('SELECT * FROM users WHERE age >:age', ['age' => 18]);

 

이러한 기술을 사용하고 기본 데이터베이스 상호 작용을 이해하면 에서 데이터베이스 쿼리를 최적화할 수 있으므로 Laravel 응답 시간이 빨라지고 애플리케이션이 전반적으로 더 효율적입니다.