rails/ruby (레일즈 3 및 루비 1.9.2 사용)를 처음 접했고 불필요한 쿼리를 제거하려고합니다.레일/활성 레코드 .save! 효율성 질문
것은 내가 각각 어떻게 실행 해요 때 :
apples.to_a.each do |apple|
new_apple = apple.clone
new_apple.save!
end
와 나는 SQL 로그를 확인, 나는 하나의 INSERT 문 다음 세 가지 선택 문을 참조하십시오. select 문은 완전히 불필요한 것처럼 보입니다. 예를 들어, 그들은 다음과 같습니다 :
SELECT 과일 *에서 과일 Fruit.ID = 5 LIMIT 1;
색상 선택 *. 색상에서 Color.ID = 6 LIMIT 1;
SELECT TreeType. * from TreeType 여기서 TreeType.ID = 7 LIMIT 1;
사과 (Fruit_id, color_id, treetype_id)에 삽입 (6, 7, 8) 값 "id"를 반환합니다.
겉으로보기에는,이 작업을 수행하는 데는 많은 시간이 걸리지 만, 70k 인서트를 실행하면 각 인서트에 대해 3 가지 선택 항목에 상당한 시간이 걸릴 것입니다.
- 는 액티브의 전형적인/레일이 .save :
그래서 나는이 다음 궁금하네요! 메서드를 사용하거나 이전 개발자가 사용자 정의 코드를 추가 했습니까?
- 각 항목에 대해 실행되는 세 개의 select 문을 사용하면 상당한 시간이 추가 될 수 있습니까?
- 레일스/액티브 레코드에 내장되어있는 경우보다 효율적으로 실행하려면 쉽게 바이 패스 되겠습니까?
공정하게 말하자면, ActiveRecord는 때로는 수행한다고해도 무엇을 말합니까? 네가하는 말을 깨닫지 못한다. – tadman