[MySQL] MySQL LIMIT의 속도 저하 피하기

MySQL을 사용하다 보면 무분별하게 나도 모르게 무분별하게 LIMIT를 사용하는것을 볼 수 있다.

다른 개발자분들은 어떠신지 잘 모르겠지만, 대용량 데이터베이스에서는 LIMIT만큼은 절대로 피해야 한다.

실제로 예전에 10억개의 데이터를 가공하는데 LIMIT를 쓰니 쿼리 하나가 몇일이 걸리는 사태가 발생하곤 했다.

사용자 삽입 이미지
간단하게 테스트 테이블을 만들어서 테스트 해보자. 데이터는 2천만개가 들어있다. 천만개째부터 5만개를 가져오는 쿼리이다.
11.216초 걸렸다.

사용자 삽입 이미지
EXPLAIN을 찍어보니 인덱스를 타지 않는것을 알 수 있다. 인덱스만 타도 좋을텐데…

사용자 삽입 이미지
위와 같이 쿼리를 바꿔보았다. 0.031초 걸렸다. 위와 같이 바꾸었을때 단점은 게시판처럼 동적으로 글이 늘어나는경우 IDX값을 정의하기 어렵다. 하지만 게시판 같은 경우에는 글쓴시각등으로 처리하는 방법등이 존재한다. 잘 고민하여 설계해 보자.

사용자 삽입 이미지
EXPLAIN을 찍어보니 인덱스를 타는것을 알 수 있다. 인덱스를 타고 천만번째로 바로 이동한 다음에 5만개를 가져올것이다.