원시 SQL로 복잡한 Rails 쿼리 최적화
특히 Heroku와 같은 플랫폼에 Rails 애플리케이션을 배포하면 복잡한 데이터베이스 쿼리로 인해 발생하는 성능 병목 현상이 나타날 수 있습니다. 이 문서에서는 원시 SQL을 사용하여 이러한 쿼리의 효율성을 크게 향상시킬 수 있는 방법을 보여줍니다.
Rails에서 원시 SQL 활용
Rails는 사용자 정의 SQL을 직접 실행하기 위한 메커니즘을 제공합니다. 이는 ActiveRecord 쿼리 빌더를 우회하여 실행 시간이 더 빨라지는 경우가 많습니다. 과정은 다음과 같습니다.
ActiveRecord::Base.connection.execute
을 사용하여 데이터베이스에 대해 쿼리를 실행합니다.예시
조인된 테이블 및 순서 지정과 관련된 시나리오를 살펴보겠습니다.
<code class="language-ruby">@payments = PaymentDetail.joins(:project).order('payment_details.created_at desc') @payment_errors = PaymentError.joins(:project).order('payment_errors.created_at desc') @all_payments = (@payments + @payment_errors)</code>
이 코드는 PaymentDetail
및 PaymentError
테이블을 조인하여 created_at
타임스탬프를 기준으로 결과를 정렬합니다. 동등한 원시 SQL은 다음과 같습니다.
<code class="language-sql">sql = "SELECT * FROM payment_details pd LEFT JOIN projects p ON pd.project_id = p.id UNION ALL SELECT * FROM payment_errors pe LEFT JOIN projects p ON pe.project_id = p.id ORDER BY created_at DESC"</code>
그러면 실행이 간단해집니다.
<code class="language-ruby">records_array = ActiveRecord::Base.connection.execute(sql)</code>
성능 향상
원시 SQL을 사용하면 Rails의 Active Record 쿼리 생성에 따른 오버헤드가 제거되어 잠재적으로 특히 대규모 데이터 세트의 경우 상당한 성능 향상을 가져올 수 있습니다. records_array
은 Ruby 배열처럼 처리될 수 있으므로 애플리케이션 로직에 원활하게 통합될 수 있습니다. 이 기술은 시간 초과가 발생하기 쉬운 복잡한 쿼리를 처리할 때 특히 유용합니다.
위 내용은 원시 SQL이 복잡한 Rails 쿼리의 성능을 어떻게 향상시킬 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!