> ## Documentation Index
> Fetch the complete documentation index at: https://villagesql.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# MySQL LIMIT

> LIMIT과 OFFSET으로 MySQL 결과의 일부만 반환하는 방법, 이 절의 2가지 형태, 그리고 ORDER BY 없는 LIMIT이 왜 임의의 행을 주는지 설명합니다.

> [card] [VillageSQL is a drop-in replacement for MySQL with extensions.](https://villagesql.com/docs/en/8.4/stable/install-server.md)
>
> All examples on this page work on VillageSQL. Install Now →

`LIMIT`은 쿼리가 반환하는 행 수에 상한을 둡니다. 큰 테이블의 맨 위를 들여다볼 때 손을 뻗는 절이고, 결과를 페이지 단위로 넘기는 메커니즘의 바탕입니다.

시작하기 전에 `mysql -u root -p sakila`로 클라이언트를 여세요.

## LIMIT의 동작 방식

```sql theme={null}
SELECT COLUMN_LIST
FROM TABLE_NAME
ORDER BY SORT_COLUMN
LIMIT ROW_COUNT OFFSET SKIP_COUNT;
```

`ROW_COUNT`를 원하는 행 수로, `SKIP_COUNT`를 먼저 건너뛸 행 수로 바꾸세요. `LIMIT`은 `ORDER BY` 뒤, 맨 마지막에 옵니다. `OFFSET` 부분은 선택 사항입니다.

## 예제

### 처음 몇 행

```sql theme={null}
SELECT title FROM film ORDER BY title LIMIT 5;
```

```text theme={null}
+------------------+
| title            |
+------------------+
| ACADEMY DINOSAUR |
| ACE GOLDFINGER   |
| ADAPTATION HOLES |
| AFFAIR PREJUDICE |
| AFRICAN EGG      |
+------------------+
5 rows in set (0.00 sec)
```

결과 전체가 5개의 행이므로, 닫는 테두리와 행 수는 잘린 것이 아니라 결과의 실제 끝입니다.

### 먼저 몇 행 건너뛰기

```sql theme={null}
SELECT title FROM film ORDER BY title LIMIT 5 OFFSET 10;
```

```text theme={null}
+-----------------+
| title           |
+-----------------+
| ALAMO VIDEOTAPE |
| ALASKA PHANTOM  |
| ALI FOREVER     |
| ALICE FANTASIA  |
| ALIEN CENTER    |
+-----------------+
5 rows in set (0.00 sec)
```

정렬된 목록의 11번째부터 15번째 행입니다.

### 숫자 2개 형태

MySQL은 오프셋과 개수를 쉼표로 구분한 쌍으로, 오프셋을 먼저 쓰는 것도 받아들입니다. 뜻은 정확히 같습니다.

```sql theme={null}
SELECT title FROM film ORDER BY title LIMIT 10, 5;
```

```text theme={null}
+-----------------+
| title           |
+-----------------+
| ALAMO VIDEOTAPE |
| ALASKA PHANTOM  |
| ALI FOREVER     |
| ALICE FANTASIA  |
| ALIEN CENTER    |
+-----------------+
5 rows in set (0.00 sec)
```

예제 2와 같은 5개의 제목입니다. 2개의 숫자가 두 형태 사이에서 반대 순서로 나타나는데, 이것은 하나 차이 혼동의 확실한 원인이므로, 이 튜토리얼은 `LIMIT ROW_COUNT OFFSET SKIP_COUNT`로 씁니다.

## ORDER BY 없는 LIMIT은 임의의 행을 요청합니다

`ORDER BY`를 빼도 쿼리는 여전히 실행됩니다.

```sql theme={null}
SELECT title FROM film LIMIT 5;
```

```text theme={null}
+------------------+
| title            |
+------------------+
| ACADEMY DINOSAUR |
| ACE GOLDFINGER   |
| ADAPTATION HOLES |
| AFFAIR PREJUDICE |
| AFRICAN EGG      |
+------------------+
5 rows in set (0.00 sec)
```

정렬된 쿼리가 반환한 것과 같은 5개의 제목이고, 그것이 이 쿼리를 위험하게 만듭니다. 문장의 어떤 부분도 그 순서를 요청하지 않았습니다. 서버에 쿼리를 어떻게 실행했는지 물으면 왜 그 순서로 돌아왔는지 말해 줍니다:

```sql theme={null}
EXPLAIN SELECT title FROM film LIMIT 5;
```

```text theme={null}
+----+-------------+-------+------------+-------+---------------+-----------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type  | possible_keys | key       | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-------+------------+-------+---------------+-----------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | film  | NULL       | index | NULL          | idx_title | 514     | NULL | 1000 |   100.00 | Using index |
+----+-------------+-------+------------+-------+---------------+-----------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)
```

그 `1 warning`은 쫓아갈 것이 아닙니다. `EXPLAIN`과 `EXPLAIN FORMAT=JSON`은 옵티마이저가 다시 쓴 쿼리를 담은 `Note 1003`을 붙이고, `SHOW WARNINGS`가 그것을 출력합니다.

`key` 열은 `idx_title`을 지목하는데, `title`의 인덱스로 이미 그 열을 정렬된 순서로 보관하고 있으므로, 인덱스를 읽는 것이 답하는 가장 싼 방법입니다. 행은 그 선택의 부작용으로 정렬되어 도착했습니다. 그 인덱스를 삭제하거나, select 목록에 열을 하나 더하거나, 서버에 더 많은 데이터를 주면, 쿼리는 그대로인데 그 선택이 바뀔 수 있습니다.

`LIMIT`은 `ORDER BY`가 어느 행인지 말하지 않는 한 "아무 행"을 뜻합니다.

## 요약

* 돌아오는 행 수에 상한을 두려면 `LIMIT`을 사용하세요.
* 행을 가져오기 전에 건너뛰려면 `OFFSET`을 추가하세요.
* 숫자 순서가 뒤집히는 쉼표 형태보다 `LIMIT ROW_COUNT OFFSET SKIP_COUNT`를 쓰세요.
* `LIMIT`은 언제나 `ORDER BY`와 짝지으세요. 그렇지 않으면 임의의 행을 요청한 것입니다.

## 함께 보기

* [ORDER BY](https://villagesql.com/docs/ko/tutorial/order-by.md) — LIMIT이 가져갈 행 정하기
* [MySQL의 페이지네이션](https://villagesql.com/docs/ko/guides/pagination.md) — OFFSET이 느려지는 이유, 그리고 대신 쓸 것
* [MySQL의 EXPLAIN 읽기](https://villagesql.com/docs/ko/guides/reading-explain.md) — 그 플랜 행의 나머지 뜻


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.