VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
LIMIT은 쿼리가 반환하는 행 수에 상한을 둡니다. 큰 테이블의 맨 위를 들여다볼 때 손을 뻗는 절이고, 결과를 페이지 단위로 넘기는 메커니즘의 바탕입니다.
시작하기 전에 mysql -u root -p sakila로 클라이언트를 여세요.
LIMIT의 동작 방식
ROW_COUNT를 원하는 행 수로, SKIP_COUNT를 먼저 건너뛸 행 수로 바꾸세요. LIMIT은 ORDER BY 뒤, 맨 마지막에 옵니다. OFFSET 부분은 선택 사항입니다.
예제
- 처음 몇 행
- 먼저 몇 행 건너뛰기
- 숫자 2개 형태
MySQL은 오프셋과 개수를 쉼표로 구분한 쌍으로, 오프셋을 먼저 쓰는 것도 받아들입니다. 뜻은 정확히 같습니다.
LIMIT ROW_COUNT OFFSET SKIP_COUNT로 씁니다.
ORDER BY 없는 LIMIT은 임의의 행을 요청합니다
ORDER BY를 빼도 쿼리는 여전히 실행됩니다.
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 — LIMIT이 가져갈 행 정하기
- MySQL의 페이지네이션 — OFFSET이 느려지는 이유, 그리고 대신 쓸 것
- MySQL의 EXPLAIN 읽기 — 그 플랜 행의 나머지 뜻