문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
|
database:seek_method [2022/03/22 17:00] kwon37xi |
database:seek_method [2023/05/31 13:27] (현재) kwon37xi [seek method] |
||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| ====== seek method ====== | ====== seek method ====== | ||
| + | * 명칭이 명확하지 않음. | ||
| + | * seek method, keyset pagination 등으로 불리는 듯. | ||
| + | * [[java: | ||
| + | * https:// | ||
| + | |||
| + | |||
| + | ===== offset/ | ||
| * '' | * '' | ||
| + | * 또한, 페이지를 이동하는 사이에 '' | ||
| + | * 데이터 추가시 : 그 뒷 페이지에서 앞선 조회에서 나왔던 데이터가 새로 추가된 데이터로 인해 뒤로 밀리면서 뒷편 페이징에서 다시 출현하게됨. | ||
| + | * 데이터 삭제시 : 이번 페이지에서 맨 앞부분에 조회되었어야할 데이터가 앞 선 페이지에서의 데이터 삭제로 바로 앞 페이지 쪽으로 이동하면서 조회가 안되고 누락되는 현상 발생. | ||
| + | * 거기에다 '' | ||
| + | ===== seek method ===== | ||
| * 이를 해결하려면 PK id 값으로 정렬을 하고(보통은 '' | * 이를 해결하려면 PK id 값으로 정렬을 하고(보통은 '' | ||
| * 처음에는 PK값 제약없이 조회, 조회 결과 limit 이 10이면 마지막 PK값 기억 | * 처음에는 PK값 제약없이 조회, 조회 결과 limit 이 10이면 마지막 PK값 기억 | ||
| - | * 그 다음부터는 '' | + | * 그 다음부터는 |
| + | * 물론 **desc 일 때**는 '' | ||
| * 이 방식을 '' | * 이 방식을 '' | ||
| + | * 조회 일관성을 위해 일정한 '' | ||
| + | |||
| + | |||
| + | ===== 주의 ===== | ||
| + | * 최초 시작 쿼리의 경우에도 '' | ||
| + | * 모든 seek method 쿼리에는 '' | ||
| + | * 이렇게 해야 불필요한 전체 정렬('' | ||
| + | ===== 최종 형태 ===== | ||
| + | * '' | ||
| + | <code sql> | ||
| + | select min(PK) from table; -- 값 저장: pkmin | ||
| + | select max(PK) from table; -- 값 저장 : pkmax | ||
| + | -- 조회 시작시 | ||
| + | select * | ||
| + | from table | ||
| + | where | ||
| + | pk >= [pkmin] | ||
| + | and pk <= [pkmax] | ||
| + | [기타조건] | ||
| + | order by pk asc | ||
| + | limit [pageSize] | ||
| + | -- 그 뒤부터는 | ||
| + | select * | ||
| + | from table | ||
| + | where | ||
| + | pk > [앞선 조회의 마지막 PK값] | ||
| + | and pk <= [pkmax] | ||
| + | [기타조건] | ||
| + | order by pk asc | ||
| + | limit [pageSize] | ||
| + | </ | ||
| ===== 참조 ===== | ===== 참조 ===== | ||
| * [[https:// | * [[https:// | ||
| * [[https:// | * [[https:// | ||
| + | * [[https:// | ||
| * [[https:// | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||