티스토리 뷰

프로그래밍 공부/Ruby on Rails : 이론

Ruby on Rails : SQL Performance의 고민 (서론)

마음 따뜻한 개발자, 나른한 하루 2019. 11. 6. 16:28

Ruby on Rails 코드를 짤 때 있어서 남들한테 홈페이즈 결과(프론트)가 보여지는거도 중요하지만, 내부 퍼포먼스도 중요합니다.

 

이번에는 SQL 퍼포먼스에 대해 한번 글을 써나아가보고자 합니다.

 

 

 

  • SQL Performance : update / update_all

SQL 퍼포먼스를 설명에 있어 대표적으로 update, update_all 메소드에 대해 살펴보겠습니다.

1) update : 조건에 맞는 메소드에 대해 Attribute 내용을 수정합니다.

 

2) update_all : 조건에 맞는 데이터 전체를 한번에 수정합니다.

 비교분석  SQL 작업 속도

 

update, update_all 비교분석

update 메소드를 통해서도 조건에 맞는 다수의 데이터를 한번에 수정할 수 있긴 합니다.

그런데 update 메소드와 update_all 메소드의 모든 데이터 비교시간을 보면 차이가 분명하게 나타납니다.

 

44개의 Update SQL 작업 완수시간을 따져보면

  • update은 1.0ms × 44개 = 44.0ms

  • update_all은 15.7ms

많은 시간차가 나는것이 확인됩니다.

하지만 그렇다고 해서 소규모 데이터에 대해 update_all 메소드가 만능은 아닙니다.

겨우 1개의 데이터를 수정함에도 불구하고 데이터 하나 수정하는 데에만 13.4ms 라는 시간이 걸렸습니다.

 

 

  • 주의사항 : 유효성 검사 여부

레사모 톡방에 소재거리 주신 ㅅㅇ님께 감사합니다 :D

유효성 검사를 포함하여 데이터 수정이 이루어짐에 있어선, update_all은 피하는게 좋습니다.

만약 User 데이터에 대해 다음과 같이 유효성 조건이 있다고 해보겠습니다.

class User < ApplicationRecord
	## :name 에 대한 중복 유효성 검사
	validates_uniqueness_of :name
end

그리고 1번 계정의 name김철민 이름이 존재합니다.

 

1) update

update 메소드를 통해 만약 이미 있는 이름(name)으로 수정을 시도하면 에러와 함께 boolean(false) Return이 됩니다.

 

2) update_all

반면에 update_all 메소드는 특별한 유효성 검사 없이 데이터 수정이 이루어집니다.

 

위 상황으로 겨루어 봤을 때, 유효성 검사가 필요한 데이터에 대해서는 update_all 사용은 안하는게 나을 수 있습니다.

댓글
댓글쓰기 폼
공지사항
Total
156,759
Today
59
Yesterday
130
링크
«   2021/11   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        
글 보관함