티스토리 뷰
Ruby on Rails 코드를 짤 때 있어서 남들한테 홈페이즈 결과(프론트)가 보여지는거도 중요하지만, 내부 퍼포먼스도 중요합니다.
이번에는 SQL 퍼포먼스에 대해 한번 글을 써나아가보고자 합니다.
-
SQL Performance : update / update_all
SQL 퍼포먼스를 설명에 있어 대표적으로 update, update_all 메소드에 대해 살펴보겠습니다.
1) update : 조건에 맞는 메소드에 대해 Attribute 내용을 수정합니다.
2) update_all : 조건에 맞는 데이터 전체를 한번에 수정합니다.
비교분석 SQL 작업 속도
update 메소드를 통해서도 조건에 맞는 다수의 데이터를 한번에 수정할 수 있긴 합니다.
그런데 update 메소드와 update_all 메소드의 모든 데이터 비교시간을 보면 차이가 분명하게 나타납니다.
44개의 Update SQL 작업 완수시간을 따져보면
-
update은 1.0ms × 44개 = 44.0ms
-
update_all은 15.7ms
많은 시간차가 나는것이 확인됩니다.
하지만 그렇다고 해서 소규모 데이터에 대해 update_all 메소드가 만능은 아닙니다.
겨우 1개의 데이터를 수정함에도 불구하고 데이터 하나 수정하는 데에만 13.4ms 라는 시간이 걸렸습니다.
-
주의사항 : 유효성 검사 여부
유효성 검사를 포함하여 데이터 수정이 이루어짐에 있어선, 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 사용은 안하는게 나을 수 있습니다.
'프로그래밍 공부 > Ruby on Rails : 이론' 카테고리의 다른 글
SQLite, PostgreSQL 차이 : Like / iLike (2) | 2019.12.13 |
---|---|
Ruby on Rails : SQL N+1 맛보기 (4) | 2019.11.06 |
Ruby on Rails : 여러가지 메소드 (일부는 깊게 파보기) (0) | 2019.11.06 |
Ruby on Rails : 비동기(Ajax) 이벤트 구현 (4) | 2019.11.03 |
Ruby on Rails : 댓글 구현 (1:M 개념 익히기) (0) | 2019.11.03 |