반응형
Mysql은 오라클이나 SQL Server 군 처럼 Paging을 하기위한

rownum 이란 함수가 지원되지 않는다.

따라서 보통 limit를 사용하는데, 이렇게 되면 페이지의 순번을 나눌때 자바단에서 별도 로직으로 처리하여

보여줘야 하기 때문에 여간 귀찮은 일이 아니다.

그래서 Mysql 에서 Rownum을 구현하여 Paging하는 기법에 대해 알아보도록 하겠다.


[ MYSQL 에서 RowNum을 구현한 Paging Query ]
  SELECT *
FROM   (SELECT @rnum := @rnum + 1 AS rownum,
               testdb.* 
        FROM   (SELECT @rnum := 0) r,
               testdb
        ORDER  BY idx DESC) result
WHERE  rownum BETWEEN ( 1 + ( 1 - 1 ) * 10 ) AND ( 1 * 10 ) 



위 쿼리는 페이지 사이즈가 10인 경우를 셋팅한 값이다.

페이지 사이즈가 1 ~ 11 ~ 21 이렇게 10을 공차로 진행되기 때문에 등차수열 공식에 따라

F(x) = a1(초기값) + (n-1)d(공차)

를 이용하여 1+ (n-1) * 10 이 된다.

그럼 limit를 이용한 방법에 따라 보자

[ MYSQL 에서 LIMIT 를 이용한 Paging Query ]
 SELECT *
FROM   testdb
ORDER  BY idx DESC
LIMIT  0, 10 



위 쿼리는 결과값은 앞의 값과 별 다를것이 없다.

그럼 둘의 속도차이는 어떤지 보자...

Mysql 옵티마이져가 Cost인지 뭔지는 아직 잘모르는 상황에서 Isam 방식의 테이블 스캔시

80만건의 데이터를 기준으로 하였을때

Rownum = 4초
limit  = 0초


이다. 흠.~~` 근데 limit를 쓰면 자바단에서 소스로 처리해야할 순번 문제가 있다.

결론적으로 데이터가 대용량 서비스 인 경우는 limit를 사용하는게 적당하며, 50만건 이하의 데이터가 있을 시에는
ROWNUM을 구현하는 것이 바람직 한 방법이라고 생각한다.

이상 랑이의 한마디 끝~~

반응형

'DB > Maria & Mysql' 카테고리의 다른 글

[MYSQL GRANT를 이용한 권한 설정]  (0) 2010.07.16
[ MYSQL 유용한 함수 ]  (0) 2010.07.09
Mysql Character Set 변경방법  (0) 2010.06.16
Mysql 원격접속 허용 설정하기  (0) 2010.06.04
Mysql 계정 생성 방법 기술  (0) 2010.06.04

+ Recent posts