Laravel의 Eloquent ORM과 Raw SQL 쿼리의 성능 차이는 주로 RAW SQL의 직접 실행과 비교하여 웅변의 추상화 및 처리 오버 헤드에서 주로 STEM입니다.
Eloquent Orm의 성능 오버 헤드
Eloquent는 데이터베이스 레코드를 PHP 객체로 변환하는 객체 관계 매핑 레이어를 제공합니다. 이 추상화는 편의성과 가독성을 추가하지만 몇 가지 성능 비용을 소개합니다.
- CPU 및 메모리 사용 증가 : 웅변은 검색 또는 조작 된 각 데이터베이스 레코드의 객체를 인스턴스화하여 객체 변환없이 데이터 행에서 직접 작동하는 원시 SQL보다 더 많은 메모리와 CPU 리소스를 소비합니다 [3] [6].
- 실행 시간이 느린 경우 : 추가 처리로 인해 웅변 쿼리는 일반적으로 실행하는 데 더 오래 걸립니다. 이것은 특히 수천 개의 레코드를 삽입하거나 업데이트하는 것과 같은 대량 작업에서 두드러집니다.
- 복잡한 쿼리 생성 : 여러 테이블 조인과 관련된 작업의 경우 Eloquent는 종종 잘 만들어진 단일 RAW SQL 조인 쿼리보다 최적화되지 않은 여러 SQL 쿼리 또는 복잡한 쿼리를 생성합니다. 이로 인해 여러 조인이있는 선택 작업에서 실행 시간이 더 길어집니다 [3].
원시 SQL 장점
원시 SQL 쿼리는 ORM 레이어를 우회하여 데이터베이스에 직접 SQL 명령을 전송합니다. 결과가 발생합니다.
- 더 빠른 실행 : 원시 SQL 쿼리는 객체 생성 및 번역 레이어의 오버 헤드를 피하기 때문에 더 빠르게 실행됩니다. 성능 테스트는 데이터 볼륨 또는 쿼리 복잡성이 증가함에 따라 시간 차이가 증가함에 따라 인서트, 업데이트 및 선택 작업에서 웅변적인 실적을 보여줍니다 [3] [6].
- 벌크 및 복잡한 작업의 경우 : 쿼리 구조 및 최적화를 정확하게 제어 할 수 있으므로 대량 인서트/업데이트 및 다중 조인과 관련된 복잡한 쿼리에 대해 원시 SQL이 더 효율적입니다 [3] [6].
각각을 사용할 때
-Loquent ORM : 비교적 간단한 CRUD 작업 및 소규모 데이터 세트를 갖춘 중소형 응용 프로그램에 가장 적합합니다. 개발자 생산성, 코드 가독성, 유지 관리 및 보안 기능을 향상시켜 원시 성능이 중요하지 않을 때 이상적입니다 [3] [6].
-RAW SQL : 실행 속도가 가장 높은 대량의 데이터, 벌크 작업 또는 복잡한 쿼리를 다루는 성능 크리티컬 애플리케이션에 선호됩니다. 원시 SQL은 이러한 시나리오에서 더 많은 제어와 효율성을 제공합니다 [3] [6].
요약
Eloquent ORM은 상당한 개발 편의성을 제공하지만 원시 SQL 쿼리에 비해 측정 가능한 성능 페널티가 발생합니다. 차이는 대규모 데이터 작업 및 복잡한 쿼리에서 가장 주목 할만합니다. RAW SQL은 더 빠르게 실행하고 더 적은 리소스를 사용하지만 더 많은 수동 쿼리 관리가 필요합니다. 이들 중에서 선택하는 것은 응용 프로그램의 성능 요구 사항과 개발 우선 순위에 달려 있습니다 [3] [6].
인용 :
[1] https://www.reddit.com/r/laravel/comments/hezv6m/eloquent_vs_query_builder_vs_sql_performance_test/
[2] https://laravel.io/forum/04-23-2014-eloquent-vs-raw-sql whith-is-really-better
[3] https://www.diva-portal.org/smash/get/diva2:1014983/fulltext02
[4] https://stackoverflow.com/questions/14570568/speed-comparison-between-eloquent-morm-query-builder and-raw-sql-queries
[5] https://www.youtube.com/watch?v=n_rbsojfcau
[6] https://blog.livares.com/comparison-of-performance-between-eloquent-and-raw-query/
[7] https://dev.to/hesamrad/laravel-orm-vs-query-builder-vs-sql-test-4knf
[8] https://stackoverflow.com/questions/38391710/what-are-the-key-differences-between-laravels-eloquent-orm-and-query-builder