메인 콘텐츠로 건너뛰기

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 부분은 선택 사항입니다.

예제

  1. 처음 몇 행

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

  1. 먼저 몇 행 건너뛰기

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

  1. 숫자 2개 형태

MySQL은 오프셋과 개수를 쉼표로 구분한 쌍으로, 오프셋을 먼저 쓰는 것도 받아들입니다. 뜻은 정확히 같습니다.
예제 2와 같은 5개의 제목입니다. 2개의 숫자가 두 형태 사이에서 반대 순서로 나타나는데, 이것은 하나 차이 혼동의 확실한 원인이므로, 이 튜토리얼은 LIMIT ROW_COUNT OFFSET SKIP_COUNT로 씁니다.

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

ORDER BY를 빼도 쿼리는 여전히 실행됩니다.
정렬된 쿼리가 반환한 것과 같은 5개의 제목이고, 그것이 이 쿼리를 위험하게 만듭니다. 문장의 어떤 부분도 그 순서를 요청하지 않았습니다. 서버에 쿼리를 어떻게 실행했는지 물으면 왜 그 순서로 돌아왔는지 말해 줍니다:
그 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와 짝지으세요. 그렇지 않으면 임의의 행을 요청한 것입니다.

함께 보기