질문을 정리해줌


페이지네이션의 종류를 나눠보자면


임의의 페이지로 바로 갈수있게 하는 방법이 있고 - OFFSET방식, 디시인사이드, 일베

페이지만 앞뒤로 왔다갔다 하는 방법이 있다 - Keyset방식, 페이스북, 트위터


https://gall.dcinside.com/board/lists/?id=baseball_new8&page=270000
야갤 270000 페이지 링크임

디시는 정렬이 게시글번호로만 가능하지만

일베는 게시글번호 / 추천수 / 조회수로도 가능함

짤게 글수도 350만개 넘음 근데 뒷페이지로 갈수록 조금 느려지지만 빠른수준임
사실 300만개정도까지는 클러스터 인덱스로 속도 향상이 가능. 하지만 클러스터인덱스는 단 한개의 칼럼밖에 안되기때문에 다른칼럼으로 정렬할시퍼포먼스가 같은게 설명이 안됨.

로우가 1000만개가 넘어가는 테이블이 있다고 치자
거기에 페이지네이션을 하려면

LIMIT

OFFSET
ORDER BY

예제) 100000 페이지 읽기
LIMIT 50
OFFSET (50 * 100000) - 1
ORDER BY date


을 이용한 쿼리를 사용한다.
그런데 문제는 레코드수가 늘어날수록

인덱스 여부에 상관없이 OFFSET의 성능은 급격하게 하락한다.

특히 SELECT에서 ORDER BY 에 쓰이지 않은 칼럼을 읽을경우

OFFSET 밖에 있는 로우까지 모두 읽어들이게 되어 더더더욱 존나게 느려진다.
이를 보완하기위해
서브쿼리로 id만을 읽은후 그 id를 JOIN하게 되면 성능은 조금 나아진다


하지만 이와 별개로 우선 OFFSET을 쓰는것 자체가 존나게 느리기 때문에

디시인사이드(일베도 포함)의 페이지네이션을 어떻게 구현한건지 궁금하다.

특히 일베같은 경우는 짤게가 게시글이 역시 천만이 넘어가는데

정렬을 게시글번호/조회수/추천수로 가능하다.


SQL쓰고 OFFSET으로 n번 페이지로 이동가능한 쿼리랑 인덱스 알려주면 페이팔로 10만원 쏴줌
OFFSET이 아니더라도 n번 페이지로 점프 가능하고
n번 페이지에서 있는동안 새글이 올라왔을시 새로고침하면 글이 밀려나야됨

정렬 칼럼 id외 다른 칼럼으로로 가능하면 됨
쿼리 소요시간은 천만레코드 대략 1초내외로