Spring

- Limit, Offset, FetchOne, FetchFirst

1. 카드에 속해있는 유저인지를 검증하기 위해 카드-유저 중간 테이블에 해당하는 카드 id - 유저 id 쌍이 존재하는지 확인하는 절차가 필요했다.

 

2. 그러나 쿼리 메소드를 짤 때 그냥 where - fetch 이런 식으로 쿼리를 짠다면 테이블 전체를 조회하게 된다.

내가 원하는 것은 딱 한 row를 찾으면 검증 끝인데 말이다.

 

3. 찾아보니 limit 를 잘만 사용하면 하나만 찾고 끝내는 것이 가능하다고 한다.

SELECT * FROM user LIMIT 0, 5 (혹은 그냥 5) 하면 테이블을 스캔하면서 해당하는 레코드가 5개가 되는 순간 스캔을 종료한다.

그러나 SELECT * FROM user ORDER BY score LIMIT 0,5 를 하면 정렬을 한 후부터 5개를 가져오기 때문에 전체 테이블을 스캔한다고 한다.

+SELECT * FROM user LIMIT 100000, 5 이렇게 사용하면 100005개의 데이터를 조회한 후 100001~100005번쨰 데이터를 조회하기 때문에 성능이 좋지 않다.

 

4. 쿼리DSL에서는 limit, fetchone, fetchfirst 메소드를 제공한다.

limit는 데이터 개수 제한을 하는 법이고

fetchone은 하나의 데이터만을 가져오려하는데 만약에 조건에 해당하는 데이터가 2개 이상이면 오류를 발생시킨다.

fetchfirst는 limit(1).fetchOne 으로 구현되어 있는데 데이터가 여러개여도 하나만 가져오는 내가 원하는 메소드였다.

 

5. limit와 querydsl과 친해지는 시간이었다.

 

 

알고리즘

- 프로그래머스 :  연속된 부분 수열의 합(Level 2, 슬라이딩 윈도우)

느낀 점

너무 춥다. 

 

'TIL' 카테고리의 다른 글

[24.01.03]  (2) 2024.01.04
[24.01.02]  (0) 2024.01.02
[23.12.27]  (2) 2023.12.27
[23.12.26]  (0) 2023.12.26
[23.12.21]  (1) 2023.12.22

+ Recent posts