MySQL에서 주로 페이징 처리를 위해 LIMIT
쿼리를 사용합니다
이때, 특정 페이지의 데이터를 가져오기 위해 Offset 값을 주어 LIMIT 50000, 20
와 같은 쿼리를 사용하는데요
이때 앞의 값인 Offset이 커질수록 쿼리의 처리 속도는 점점 느려집니다
이러한 현상의 원인은 MySQL이 Offset을 처리하는 방식에 있습니다
LIMIT 50000, 20
쿼리는 언뜻 생각하면 50000번째 record로 이동하여 20개의 row를 가져오면 될 것도 같지만 불가능합니다
이유는 다음과 같습니다
따라서 MySQL은 Offset 쿼리를 처리하기 위해 Offset + LIMIT
개수 만큼의 record를 읽은 후 마지막 LIMIT
개수만큼 취하고 나머지를 버리는 식의 처리를 하게 됩니다
즉, LIMIT 50000, 20
쿼리에서는 50020개의 record를 읽은 후, 앞의 50000개의 record를 버리고 마지막 20개를 반환하게 되는 것 입니다