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

MySQL SELECT 문에서 LIMIT 0이 허용되는 이유는 무엇일까?

MySQL SELECT 문에서 LIMIT 0이 허용되는 이유

아시다시피 MySQL SELECT 문에서 LIMIT 0을 사용하면 빈 결과 집합(Empty Set)이 반환됩니다. 그렇다면 왜 이런 문법이 존재하고, 어떤 용도로 활용될까요?

LIMIT 절은 기본적으로 전체 행이 아니라 결과 중에서 원하는 개수의 행만 가져오고자 할 때 사용합니다. 하지만 LIMIT 0은 단순히 '결과 없음'을 의미하는 것 이상의 실용적인 목적을 가지고 있습니다.

LIMIT 0의 주요 활용 목적

첫째, 컬럼 정보 확인입니다. MySQL API를 사용할 때 LIMIT 0을 실행하면 실제 데이터를 조회하지 않고도 결과 집합의 컬럼 이름과 데이터 타입 등 메타데이터만 얻을 수 있습니다.

둘째, 쿼리 유효성 검사입니다. LIMIT 0을 붙여 실행하면 대량의 데이터를 스캔하지 않으면서도 쿼리의 문법 오류나 유효성을 빠르게 확인할 수 있습니다. 자세한 내용은 아래 MySQL 공식 문서를 참고하세요.

https://dev.mysql.com/doc/refman/8.0/en/limit-optimization.html

LIMIT 0 동작 예시

실제 동작을 확인하기 위해 먼저 테스트용 테이블을 생성하겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> create table Limit0Demo
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> Name varchar(20),
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.61 sec)

이제 insert 명령을 사용해 테이블에 레코드를 삽입합니다.

mysql> insert into Limit0Demo(Name) values('David');
Query OK, 1 row affected (0.13 sec)
mysql> insert into Limit0Demo(Name) values('Larry');
Query OK, 1 row affected (0.24 sec)
mysql> insert into Limit0Demo(Name) values('Carol');
Query OK, 1 row affected (0.17 sec)
mysql> insert into Limit0Demo(Name) values('Bob');
Query OK, 1 row affected (0.12 sec)
mysql> insert into Limit0Demo(Name) values('John');
Query OK, 1 row affected (0.11 sec)
mysql> insert into Limit0Demo(Name) values('Sam');
Query OK, 1 row affected (0.11 sec)
mysql> insert into Limit0Demo(Name) values('James');
Query OK, 1 row affected (0.12 sec)
mysql> insert into Limit0Demo(Name) values('Maxwell');
Query OK, 1 row affected (0.13 sec)
mysql> insert into Limit0Demo(Name) values('Ricky');
Query OK, 1 row affected (0.09 sec)
mysql> insert into Limit0Demo(Name) values('Adam');
Query OK, 1 row affected (0.06 sec)

select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from Limit0Demo;

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

+----+---------+
| Id | Name    |
+----+---------+
|  1 | David   |
|  2 | Larry   |
|  3 | Carol   |
|  4 | Bob     |
|  5 | John    |
|  6 | Sam     |
|  7 | James   |
|  8 | Maxwell |
|  9 | Ricky   |
| 10 | Adam    |
+----+---------+
10 rows in set (0.00 sec)

사례 1: LIMIT 0 사용하기

쿼리는 다음과 같습니다.

mysql> select *from Limit0Demo limit 0;
Empty set (0.00 sec)

위 결과에서 볼 수 있듯이 LIMIT 0을 지정하면 쿼리 자체는 정상적으로 실행되지만, 반환되는 행이 하나도 없기 때문에 'Empty set'이 출력됩니다. 즉, 에러가 발생하는 것이 아니라 의도적으로 빈 결과를 반환하도록 설계된 동작입니다.

사례 2: 특정 개수의 행만 가져오기

테이블에서 원하는 개수의 행만 조회하고 싶다면 LIMIT에 숫자를 지정하면 됩니다. 예를 들어 3개의 행만 가져오는 쿼리는 다음과 같습니다.

mysql> select *from Limit0Demo limit 3;

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

+----+-------+
| Id | Name  |
+----+-------+
|  1 | David |
|  2 | Larry |
|  3 | Carol |
+----+-------+
3 rows in set (0.00 sec)

정리

MySQL에서 LIMIT 0이 허용되는 이유는 크게 두 가지입니다. 첫째, API 환경에서 결과 집합의 컬럼 구조와 데이터 타입을 데이터 조회 없이 확인할 수 있고, 둘째, 전체 데이터를 처리하지 않고도 쿼리의 유효성을 신속하게 검증할 수 있기 때문입니다. 따라서 LIMIT 0은 단순한 문법적 허용이 아니라 실무에서 유용하게 쓰이는 최적화 기법이라 할 수 있습니다.