Laravel ORM vs 쿼리 빌더 vs SQL: 속도 테스트!
4550 단어 laravelphpoptimization
나는 당신들에 대해 모르지만 나에게 이것은 큰 질문입니다. 그래서 나는 그것을 조사했고 내가 얻은 것을 공유하기로 결정했습니다.
우선 소규모 프로젝트와 개인 블로그의 경우 데이터베이스가 그렇게 크지 않고 이 세 가지 중 어느 것이든 잘 작동하기 때문에 어느 것을 선택하든 상관 없습니다.
하지만 거대한 데이터베이스가 있는 애플리케이션이나 웹사이트에서 작업하고 있다면 어떨까요?
여기에서 이 질문에 대한 답이 게임 체인저가 될 수 있습니다.
그럼 알아봅시다.
저는 100,000명 이상의 사용자와 각 사용자에게 할당된 100,000개의 기사로 데이터베이스를 준비했습니다. (사용자에게 기사를 할당하는 것은 완전히 무작위였으며 일부 사용자는 10개의 기사를 가지고 있거나 할당되지 않았을 수 있습니다.)
꽤 큰 데이터베이스라고 해도 과언이 아니죠? ;)
경고
나는 여기 있는 모든 사람들이 이미 이것을 알고 있다고 확신하지만 한 쿼리에서 데이터베이스의 모든 레코드를 가져오려고 시도해서는 절대 안 된다는 점을 언급할 가치가 있습니다.
모르는 사이에 큰 데이터베이스에서 그렇게 하려고 하면 응용 프로그램이 쉽게 중단될 수 있습니다.
이 기사의 목적을 위해 사용자와 함께 100,000개의 기사를 모두 가져오려고 했습니다.
일어난 일은 다음과 같습니다.
보다? 보기 좋지 않습니다. 원인이 된 코드는 다음과 같습니다.
$articles = Article::with('user')
->get();
이 예외의 이유는 응용 프로그램에 단순히 RAM이 부족하기 때문입니다. 데이터베이스가 너무 커서 RAM이 모든 정보 행을 처리할 수 없었습니다.
이것을 피하는 방법?
이러한 종류의 예외를 피하기 위해 더 작은 청크로 데이터를 가져올 수 있습니다. 예를 들어 예외를 피하기 위해 위의 코드를 수정할 수 있습니다.
$articles = Article::with('user')
->limit(1000)
->get();
limit(1000)
한 번에 1000개의 레코드만 가져오도록 쿼리를 제한하면 램의 일부가 사용되지 않습니다.확인; 경고로 충분합니다. 좋은 물건에 가자.
이 예제에서는 ORM, Query Builder 및 원시 SQL을 사용하여 동일한 데이터를 반환하는 쿼리를 작성했습니다. 또한 실행 시간을 계산하고 가져온 정보와 함께 반환하여 어느 것이 더 빠른지 비교할 수 있습니다.
한 번 보자.
ORM
$articles = Article::with('user')
->limit(1000)
->get();
time of execution: 0.07746
쿼리 빌더
$articles = DB::table('articles')
->join('users', 'articles.user_id', '=', 'users.id')
->limit(1000)
->get();
time of execution: 0.04171
SQL
$articles = DB::select("select * FROM articles JOIN users ON articles.user_id = users.id limit 1000");
time of execution: 0.04461
솔직히 말해서 원시 SQL이 Query Builder보다 조금 더 빠를 것으로 예상했지만 틀렸습니다. (확실히 하기 위해 몇 번 더 테스트했습니다.)
그래서 당신은 그것을 가지고 있습니다. 이 테스트의 승자는 Query Builder입니다.
물론 이러한 각 방법을 조금 더 빠르게 만드는 다른 방법이 있지만 이는 다른 게시물의 주제입니다.
다음 포스팅까지 몸조심하세요. 🖤
Reference
이 문제에 관하여(Laravel ORM vs 쿼리 빌더 vs SQL: 속도 테스트!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hesamzakerirad/laravel-orm-vs-query-builder-vs-sql-speed-test-4knf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)