> PHP 프레임워크 > Laravel > laravel 연관 쿼리 시간

laravel 연관 쿼리 시간

王林
풀어 주다: 2023-05-29 10:03:37
원래의
562명이 탐색했습니다.

Laravel은 풍부한 기능과 사용하기 쉬운 API를 갖춘 매우 인기 있는 PHP 프레임워크입니다. 그중 Eloquent ORM은 가장 강력한 데이터베이스 구성 요소 중 하나이며 쉽게 쿼리하고 상호 연결하는 데 사용할 수 있습니다.

그러나 복잡한 상관 쿼리를 수행하면 특히 루프를 사용할 때 쿼리 수가 많아지는 것을 알 수 있습니다. 이는 쿼리 성능에 영향을 미칠 뿐만 아니라 데이터베이스 연결 예외가 발생할 수도 있습니다.

그렇다면 Laravel에서 관련 쿼리 수를 어떻게 줄일 수 있을까요? 아래에서 이 기사에서는 몇 가지 솔루션을 제공합니다.

  1. Lazy loading

관련 쿼리를 수행할 때 관련 모델을 사용해야 하는 경우에만 쿼리하는 Laravel의 지연 로딩 기능을 사용할 수 있습니다.

지연 로딩은 매직 메소드 __get()을 사용하므로 관련 모델에서 호출되는 한 관련 쿼리가 트리거됩니다.

예:

$users = User::all();

foreach ($users as $user) {

echo $user->profile->name;
로그인 후 복사
로그인 후 복사

}

foreach 루프에서 $users->profile을 직접 사용하는 경우 각 루프 내에서 관련 쿼리가 실행되고 이로 인해 많은 쿼리가 발생하므로 지연 로딩을 사용하여 최적화할 수 있습니다.

$users = User::with('profile')->get();

foreach ($users as $user) {

echo $user->profile->name;
로그인 후 복사
로그인 후 복사

}

with() 메소드를 사용하여 관련 모델을 미리 로드하는 경우 , 지연 로딩은 자동으로 활성화되며, 관련 모델을 사용해야 하는 경우에만 쿼리가 생성됩니다.

  1. Eager Loading

수동으로 지연 로딩을 호출하는 한, 코드 전체를 검사하지 않으면 계속해서 반복 쿼리가 발생하므로 보다 철저한 해결 방법은 Eager Loading(미리 로딩)을 사용하는 것입니다. 필요한 모든 관련 모델을 한 번에 로드할 수 있습니다.

예:

$users = User::with('profile', 'posts')->get();

foreach ($users as $user) {

echo $user->profile->name;

foreach ($user->posts as $post) {
    echo $post->title;
}
로그인 후 복사

}

(와 함께 사용) ) 여러 관련 모델을 동시에 로드하는 경우 여러 SQL 쿼리가 실행됩니다. 관련 모델 중 하나만 사용해야 하는 경우 이 방법은 최선의 선택이 아닙니다.

  1. select는 관련 필드를 선언합니다.

Eloquent에서는 select 메소드를 사용하여 모델에 대한 필터링을 수행하고 필요한 특정 열을 지정할 수 있으며 관련 모델에도 마찬가지입니다.

예:

$users = User::with(['profile' => function ($query) {

$query->select('user_id', 'name');
로그인 후 복사

}])->get();

foreach ($users as $user ) {

echo $user->profile->name; // 只会查询'profile'表中的'user_id'和'name'列
로그인 후 복사

}

이 예제에서는 필요한 열을 출력하도록 select() 메소드를 지정하여 Eloquent ORM이 한 번에 일부 특정 데이터 열만 쿼리하도록 할 수 있습니다. 이는 특정 데이터 열을 빠르게 쿼리하는 좋은 방법입니다. 이 접근 방식을 사용하여 관련 모델에 대한 쿼리를 제한할 수 있도록 추가 쿼리 수를 줄입니다.

  1. 연관 쿼리에 조인 사용

연관 모델을 처리하는 것 외에도 특정 경우에는 조인 쿼리가 Eloquent의 연관 쿼리보다 더 효율적일 수 있습니다.

예:

$users = DB::table('users')

->join('profiles', 'users.id', '=', 'profiles.user_id')
->join('posts', 'users.id', '=', 'posts.user_id')
->select('users.name', 'profiles.age', 'posts.title')
->get();
로그인 후 복사

foreach ($users as $user) {

echo $user->name;
echo $user->age;
echo $user->title;
로그인 후 복사

}

조인 쿼리는 SQL 문의 복잡성과 유지 관리성을 증가시키지만, Eloquent ORM에 비해 조인 쿼리는 쿼리 성능을 더 잘 최적화할 수 있습니다.

요약

위의 방법은 Laravel에서 관련 쿼리 수를 줄이는 데 사용할 수 있는 효과적인 기술입니다. 일반적으로 사전 로드와 지연 로드를 사용하여 쿼리 성능을 최적화하고 반복 쿼리를 피할 수 있습니다. 일부 구체적이고 복잡한 쿼리의 경우 조인 쿼리를 사용하여 보다 효율적인 결과를 얻는 것을 고려할 수 있습니다.

마지막으로, 어떤 접근 방식을 취하든 쿼리 최적화는 항상 중요합니다. 이를 통해 애플리케이션 성능을 크게 향상하고 응답 시간을 단축할 수 있습니다.

위 내용은 laravel 연관 쿼리 시간의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿