2015-01-28 4 views
0

두 클래스가 있습니다. UserReview (사용자의 리뷰가 많음) 내가 가진 사용자가 있다면 내가 user.reviews.order("RANDOM()").limit(n)을 사용할 수 있지만 내가 잘못 아니에요 경우이가 DB에 매우 무거운 것 User.reviewsRails - 연결에서 n 개의 임의 레코드를 쿼리합니다.

의 관계에서 임의의 두 리뷰를 추출 후 가장 좋은 방법을 찾기 위해 노력하고

많은 리뷰 ...

나는 내 데이터베이스로 Postgres를 사용하고 있습니다.

생각하십니까?

+0

어떤 DB를 사용하고 계십니까? –

+0

저는 Postgres를 사용하고 있습니다. 질문에 추가됨. 감사! –

+0

나는 그것이 .. .. DB 네이티브 메소드가 처리해 줄 것이라고 생각한다 .. –

답변

2

데이터베이스 독립적 인 솔루션은 다음과 같습니다

user.reviews.where(id: user.reviews.pluck(:id).sample(2)) 

난 항상 데이터베이스 독립적 인 솔루션을 선호 그렇지 않으면 의미가 전혀 액티브을 사용하지 않기 때문에. 당연히이 솔루션은 RANDOM() 접근 방식에 비해 두 가지 DB 요청을 처리합니다. 성능 현명한 데이터베이스가 이러한 요청을 캐시 할 수 있기 때문에 까다로운 질문입니다. RANDOM() 요청을 캐시 할 수 없습니다.

관련 문제