select *
from post
where id < 20 (커서값)
limit 10
이런 쿼리가 있어 PK를 커서로 써서 10개씩 자연스럽게 더 예전글로가는건데 클러스터링타니까 당연히 빠르겠지
그런데 PK를 UUID로 바꿨어 그래서 생성일자로 하게되었어
select *
from post
where created_at > '2026-03-09 20:30:11' (커서값)
limit 10
create_at에 인덱스 설정했어
그런데 만약 동일한 시간대에 글이 등록되었다고하면 글 하나가 안보일수가있어
그래서
create_at, uuid 복합인덱스를 만들고
select *
from post
where created_at > '2026-03-09 20:30:11' OR (crated_at = '2026-03-09 20:30:11' AND UUID < 커서UUID)
limit 10
가 되는데 내가 봤을땐 하나의 인덱스를 써서 인덱스 병합은 안일어날거같은데
ai말로는 OR조건때문에 옵티마이저가 범위스캔을 두번하거나 유니온으로 분리할수있다고 하네
select *
from post
WHERE(created_at, UUID) < ( '2026-03-09 20:30:11', 커서UUID)
limit 10
가 해결책이 될 수 있을까
참고로 실제로 일어난 일은 아니고 상황의 가정이야
uuid는 랜덤값아니냐 uuid 크기를 비겨해서어쩜
Tsid 쓰셈
시간순 정렬 가능한 uuidv7 사용하기
별론거같아 - dc App
흔히말하는 uuid는 uuid v4인데, 이건 그 문자열이 uuid v4라는걸 표시하기 위한 몇자리 빼고는 전부 완전 랜덤으로 생성하는거임 크기 비교가 의미가 없어