티스토리 뷰
오늘의 포스팅 내용은 "ActiveRecord의 length, count, size 의 차이를 간략히 알아보자" 이다.
Rails 로 기능 개발을 하면서 ActiveRecord Relation 의 Element 의 개수를 확인하기 위해 ActiveRecord 의 length, count, size 를 사용할 때가 있다. 우리는 다양한 방법으로 개수를 확인할 수 있지만 length, count, size 에는 조금씩 차이가 있으니 알고 사용하면 더 도움이 된다.
count
count 는 ActiveRecord Relation 의 Element 의 수를 확인하기 위해서 SQL query 를 실행한다. 호출 시점에 Database 의 정확한 수를 확인할 수 있다는 점이 장점이지만 상황에 따라서 불필요하게 조회 쿼리가 한번 더 호출된다.
# 전체 사용자를 조회해서 메모리에 load 한다.
users = Accounts::User.all.load
# 전체 사용자의 수를 확인한다.
users.count
--- 실행 SQL ---
SELECT COUNT(*) FROM `users`
--- 실행결과 ---
32
length
length 는 메모리에 load 되어 있는 ActiveRecord Relation 의 Element 수를 반환한다. 불필요하게 조회 쿼리를 다시 호출하지 않는다는 장점이 있지만 load 된 이후에 추가된 데이터가 있을 경우 반영되지 않기 때문에 값이 부정확할 수 있다.
# 전체 사용자를 조회해서 메모리에 load 한다.
users = Accounts::User.all.load
# users load 후에 신규 데이터 추가
Accounts::User.create(name: 'new_user_after_load')
# 전체 사용자의 수를 확인한다.
users.length
--- 실행 SQL ---
없음
--- 실행결과 ---
32
# count 로 DB 의 사용자 수를 확인한다.
users.count
--- 실행 SQL ---
SELECT COUNT(*) FROM `users`
--- 실행결과 ---
33
size
size 는 위에서 확인한 length 와 count 의 조합으로 사용된다. 즉 size 를 호출했을때 이미 메모리에 load 되어 있다면 length 가 동작할 것이고, 그렇지 않다면 count 가 호출될 것이다. 다음은 ActiveRecord Relation 의 size 함수의 내부 정의이다.
module ActiveRecord
class Relation
...
# Returns size of the records.
def size
loaded? ? @records.length : count(:all)
end
...
일반적으로 size 를 이용하면 여러 가지 상황에 대한 고려를 크게 하지 않아도 되기 때문에 유용하다고 본다.
오늘은 여기까지~
누군가에게 도움이 되었길 바라면서 오늘의 포스팅 끝~
'Ruby' 카테고리의 다른 글
[RoR] ActiveRecord 의 scope 사용시 주의할점 (0) | 2020.07.03 |
---|---|
[RoR] Rails ActiveRecord (0) | 2019.10.03 |
[RoR] Rails Autoloading 알아보기 (0) | 2019.01.27 |
[Ruby] 루비 상수참조 규칙 알아보기 (0) | 2019.01.13 |
[Ruby] 루비 메타프로그래밍(6) - Singleton Class (2) | 2018.07.14 |
- Total
- Today
- Yesterday
- innoDB lock
- lock
- Autoloading
- gap lock
- InnoDB
- MySQL 인덱스
- MySQL 족보
- db
- 루비 상수
- 넥스트 키 락
- 루비 메타프로그래밍
- next key lock
- mysql lock
- dead lock
- autoload_paths
- 갭 락
- 인덱스
- MySQL
- 루비
- ruby
- 트랜잭션
- metaprogramming
- 되추적
- Pair-programming
- Elasticsearch Cluster
- 메타프로그래밍
- ruby meta programming
- 페어프로그래밍
- 엘라스틱서치 기초
- 페어 프로그래밍
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |