아직도 ORDER BY RANDOM() 쓰세요? — 100만 행에서 랜덤 1건, 7초를 1초이하로
·
Knowledge/데이터베이스(DB)
안녕하세요! Justee에 오신 걸 환영합니다.이번 글에서는 실무에서 만난 아주 흔한 SQL 한 줄, ORDER BY RANDOM() 이야기를 해보려고 합니다."조건에 맞는 데이터 중 랜덤으로 하나 뽑기" — 정말 자주 쓰는 패턴이죠. 그런데 이게 데이터가 커지면 어떻게 서비스를 느리게 만드는지, 그리고 어떻게 7초를 1ms로 줄였는지 하나씩 알아보겠습니다.목차문제 상황 — 랜덤 1건에 7초EXPLAIN으로 원인 찾기첫 번째 시도: TABLESAMPLE (그리고 왜 실패했는지)해결: 랜덤값을 미리 저장하는 rand_key 패턴두 번째 함정: pivot을 CTE로 넘기면 39초조건(필터)이 붙으면? — 플래너를 믿자왜 이게 동시성에도 좋은가정리1. 문제 상황 — 랜덤 1건에 7초먼저 상황부터 설명드릴게요...