MariaDB

MariaDB Page (페이지) 처리를 위한 SQL

aappsroot·2014년 2월 19일·조회 15,727

얼마 전, Tomcat 카테고리에 jPetStore를 올린 적이 있습니다.

당시 MariaDB에 데이터를 올렸는데 페이지 처리를 위하여 limit 구문을 사용하였습니다. 즉, 카테고리 내 목록을 보기 위하여 ibatis단에서 다음과 같이 처리를 했지요.

select productid, name, descn, category from product where category = #categoryId# limit #start#, #pageCount#

(예를 들어, 60번째부터 20건을 가져올 때 limit 60, 20 이 됩니다)

그런데 product 테이블에 데이터가 점점 증가하면서 눈에 띄는 성능 하락이 발생하였습니다. 결론적으로 원인은 바로 limit이었는데요, limit 40000, 20처럼 4만 번째부터 20건을 가져오려고 한다면 40,000건까지 계속 skip 후에 드디어 20건을 가져오는 메커니즘을 가진 것이 바로 limit 이었습니다.

그리고 다음과 같이 DBA의 도움을 받아 쿼리 튜닝을 한 후에 문제를 해결할 수 있었습니다.

select productid, name, descn, category from product inner join (
  select productid from product where category = #categoryId# limit #start#, #pageCount#) as b
using(productid)

* MariaDB (MySQL) 의 페이지 처리에 대해서는 여전히 많은 논쟁이 있습니다. 다른 의견 환영합니다.

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.