← 질문 목록
#358깊이 0
목록을 나눌 때 번호와 커서는 무엇이 다른가?
번호는 몇 개를 건너뛸지 말하고, 커서는 어느 지점 다음부터인지 말한다. 이 차이가 비용과 정확성을 가른다.
| 잣대 | 번호로 나누기 | 커서로 나누기 |
|---|---|---|
| 뒤 페이지 비용 | 건너뛴 만큼 읽어야 한다 | 인덱스가 받쳐 주면 같다 |
| 중간에 행이 늘면 | 항목이 밀려 겹치거나 빠진다 | 기준점이 있어 안 밀린다 |
| 임의 페이지로 뛰기 | 바로 된다 | 시작점을 따로 들고 있어야 한다 |
번호 방식이 뒤로 갈수록 느린 이유는 건너뛰는 행도 읽기 때문이다. 백만 번째부터 스무 개를 달라고 하면 백만 개를 세고 버린다.
커서는 정렬 기준 값을 기억해 두고 그보다 뒤에 있는 것부터 읽는다. 그 기준에 맞는 인덱스가 있으면 곧장 그 자리로 가므로 페이지가 깊어져도 비용이 그대로다.
핵심 정리
인덱스가 안 받쳐 주면 커서도 처음부터 훑는다. 커서 자체가 싼 것이 아니라, 인덱스를 쓸 수 있게 묻는 방식이라서 싼 것이다.
커서에는 조건이 하나 더 붙는다. 정렬 기준이 유일해야 한다. 같은 값이 여럿이면 경계에서 겹치거나 빠지므로 고유한 값을 함께 묶어 정렬한다.
몇 번째 페이지로 바로 뛰는 화면은 번호 방식이 단순하다. 커서로도 되지만 페이지마다 시작점을 미리 만들어 들고 있어야 한다.
전체 개수를 매번 세는 비용도 따져야 한다. 매번 세는 것이 페이지를 가져오는 것보다 비쌀 때가 있다.