Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

이중 쿼리 없이 MySQL 페이지네이션 구현하는 방법

MySQL에서 페이지네이션(페이징 처리)을 구현할 때 많은 개발자가 전체 레코드 수를 확인하기 위해 별도의 COUNT 쿼리를 추가로 실행합니다. 하지만 LIMIT 절을 활용하면 이중 쿼리 없이도 간단하게 페이지네이션을 처리할 수 있습니다.

이 글에서는 실제 예제를 통해 이중 쿼리 없이 MySQL 페이지네이션을 구현하는 방법을 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 CREATE 명령어를 사용하여 테스트용 테이블을 만들어 보겠습니다.

mysql>CREATE table RowCountDemo
   -> (
   -> ID int,
   -> Name varchar(100)
   -> );
Query OK, 0 rows affected (0.95 sec)

2. 샘플 데이터 삽입하기

INSERT 명령어를 사용하여 레코드를 하나씩 삽입합니다.

mysql>INSERT into RowCountDemo values(1,'Larry');
Query OK, 1 row affected (0.15 sec)

mysql>INSERT into RowCountDemo values(2,'John');
Query OK, 1 row affected (0.13 sec)

mysql>INSERT into RowCountDemo values(3,'Bela');
Query OK, 1 row affected (0.15 sec)

mysql>INSERT into RowCountDemo values(4,'Jack');
Query OK, 1 row affected (0.11 sec)

mysql>INSERT into RowCountDemo values(5,'Eric');
Query OK, 1 row affected (0.19 sec)

mysql>INSERT into RowCountDemo values(6,'Rami');
Query OK, 1 row affected (0.49 sec)

mysql>INSERT into RowCountDemo values(7,'Sam');
Query OK, 1 row affected (0.14 sec)

mysql>INSERT into RowCountDemo values(8,'Maike');
Query OK, 1 row affected (0.77 sec)

mysql>INSERT into RowCountDemo values(9,'Rocio');
Query OK, 1 row affected (0.13 sec)

mysql>INSERT into RowCountDemo values(10,'Gavin');
Query OK, 1 row affected (0.19 sec)

3. 저장된 데이터 조회하기

SELECT 문을 사용하여 테이블에 저장된 모든 레코드를 확인합니다.

mysql>SELECT* from RowCountDemo;

실행 결과는 다음과 같습니다.

+------+-------+
| ID   | Name  |
+------+-------+
|    1 | Larry |
|    2 | John  |
|    3 | Bela  |
|    4 | Jack  |
|    5 | Eric  |
|    6 | Rami  |
|    7 | Sam   |
|    8 | Maike |
|    9 | Rocio |
|   10 | Gavin |
+------+-------+
10 rows in set (0.00 sec)

4. 이중 쿼리 없는 페이지네이션 문법

이제 이중 쿼리 없이 페이지네이션을 적용하는 기본 문법을 살펴보겠습니다. 핵심은 WHERE 조건과 LIMIT 절의 두 개 인자를 함께 사용하는 것입니다.

SELECT column_name From  `yourTableName` WHERE someCondition LIMIT value1, value2;

LIMIT 절의 첫 번째 값(value1)은 시작 위치(오프셋)를, 두 번째 값(value2)은 가져올 최대 행 수를 의미합니다. 이 방식을 사용하면 별도의 COUNT 쿼리 없이 한 번의 쿼리로 원하는 범위의 데이터만 효율적으로 조회할 수 있습니다.

실제 적용 예제

위 문법을 실제로 적용해 보겠습니다.

mysql> SELECT ID,Name FROM `RowCountDemo` WHERE ID > 0 LIMIT 0, 11;

위 쿼리는 ID가 0보다 큰 모든 레코드 중 오프셋 0부터 최대 11개의 행을 조회합니다. 실행 결과는 다음과 같습니다.

+------+-------+
| ID   | Name  |
+------+-------+
|    1 | Larry |
|    2 | John  |
|    3 | Bela  |
|    4 | Jack  |
|    5 | Eric  |
|    6 | Rami  |
|    7 | Sam   |
|    8 | Maike |
|    9 | Rocio |
|   10 | Gavin |
+------+-------+
10 rows in set (0.00 sec)

마무리

이처럼 WHERE 조건과 LIMIT 절을 조합하면 이중 쿼리 없이도 MySQL에서 페이지네이션을 손쉽게 구현할 수 있습니다. 데이터 양이 많은 대용량 테이블에서는 OFFSET 방식 대신 WHERE 절에 마지막 조회된 ID 값을 활용하는 커서 기반(Cursor-based) 페이지네이션을 적용하면 더욱 향상된 성능을 얻을 수 있습니다.