Ruby on Rails를 처음 사용했습니다. 이제 Rails 애플리케이션의 성능 문제에 대해 연구하고 있습니다. 나는 New Relic rpm을 사용하여 코드의 병목 현상을 발견했다. 이 일을하는 동안 나는 알아낼 수없는 것을 찾습니다. (A)의레일 애플리케이션에서 SQL 쿼리 작성
class B
include DataMapper::Resource
belongs_to :A, :key=>true
belongs_to :C, :key=>true
end
모델로이다 : (A)의 기본 키와 다음과 같은 C의 기본 키 : 문제는 그 두 가지 모델 모델 B는 두 가지 속성이 A, B 및 C를 사용하고 여기에 내 레일 응용 프로그램이다 다음 :
class A
include DataMapper::Resource
property :prop1
...
has n, :bs
has n, :cs, :through => :bs
end
다음 문 a.find을 실행하는 동안 (: c.id => 10) 내부적으로는 다음과 같은 SQL 쿼리 실행 :
select a.prop1, a.prop2,... from a INNER JOIN b on a.id = b.a_id INNER JOIN c on b.c_id = c.id where (c.id=10) GROUP BY a.prop1, a.prop2,....[here in group by all the properties that has been mentioned in select appears, I don't know why]
을 그리고이 사항이 너무 많이 걸리는 시각 웹 트랜잭션 중. 흥미로운 것은, 내가 터미널의 mysql 프롬프트에서 동일한 자동 생성 쿼리를 실행할 때 시간이 매우 적다는 점이다. 나는 group by 절에서 많은 분야를 언급했기 때문에 그런 것 같아. 쿼리가 어떻게 형성되는지 이해할 수 없습니다. 누구나 친절하게 도와 주시면 이것을 이해하고 최적화 해주세요. 정말 감사 할 것입니다. 고맙습니다.
class A < ActiveRecord
has_many :B
has_many :C, through: :B
end
class B < ActiveRecord
belongs_to :A
belongs_to :C
end
class C < ActiveRecord
has_many :B
has_many :A, through: :B
end
다음 당신은 단순히 호출 할 수 있습니다 :
a.c.find(10) #mind the plural forms though
당신은 더 나은 성능이 방법을 얻을 것이다
DataMapper를 이미 사용하고 있습니다. ActiveRecord를 사용하여 다시 작성할 수 없으므로 너무 많은 작업이 필요합니다. DataMapper에 해결책이 있다면 제안하십시오. – Joy