쿼리 성능 향상을 위해 필수적인 기법인 Row Limiting은 SQL 쿼리에서 특정 개수의 행(Row)만 조회하도록 제한하는 기법을 의미합니다. 주로 부분범위처리를 할때 사용합니다.
예전엔 where절에 rownum 조건으로 제한하곤 했는데, 오라클 12C 이상 버전부터 새로운 기능이 추가되어 기본적인 사항부터 차근차근 한번 알아보고자 합니다.
Oracle에서 Row Limiting(행 제한)을 설정하는 방법은 Oracle 버전에 따라 다르게 적용됩니다. 최신 버전(Oracle 12c 이상)에서는 표준 SQL 방식인 OFFSET
과 FETCH
를 사용할 수 있으며, 이전 버전에서는 ROWNUM
또는 ROW_NUMBER()
를 활용해야 합니다.
Oracle 12c부터 도입된 OFFSET
과 FETCH
절을 사용하면 페이징 처리 및 행 제한을 쉽게 구현할 수 있습니다.
FETCH FIRST n ROWS ONLY
)SELECT *
FROM employees
ORDER BY employee_id
FETCH FIRST 10 ROWS ONLY;
✅ 위 쿼리는 employee_id
기준으로 정렬된 데이터 중 상위 10개 행을 반환합니다.
오라클 12c부터 /*+ first_rows(n) */ 힌트를 사용하면 힌트에 지정한 n으로 카디널리티를 계산하므로 비교적 인덱스를 잘 사용합니다. 페이징 처리에 윈도우 함수 또는 Row Limiting 기능을 사용한다면 /*+ first_rows(n) */ 힌트를 같이 사용해주는 것이 좋습니다.
OFFSET n ROWS FETCH NEXT n ROWS ONLY
)SELECT *
FROM employees
ORDER BY employee_id
OFFSET 5 ROWS FETCH NEXT 10 ROWS ONLY;
✅ 위 쿼리는 처음 5개 행을 건너뛰고, 그 다음 10개 행을 가져옵니다.
윈도우 함수 기능이 점점 좋아지고 12C부터는 Row Limiting도 지원 하지만, 인덱스 활용이 중요한 온라인성 쿼리에서 ‘Top N Stopkey’ 알고리즘이 잘 동작하지 않는 경우가 있어서 무턱대고 새로 추가된 기능을 사용하기보단 실행계획을 잘 보고 사용해야한다.
ROWNUM
은 Oracle에서 제공하는 가상 열로, 실행되는 순서대로 번호를 부여합니다. 하지만 ORDER BY
보다 먼저 적용되므로, 정렬된 데이터를 정확하게 제한하려면 서브쿼리를 사용해야 합니다.
SELECT *
FROM (
SELECT *
FROM employees
ORDER BY employee_id
)
WHERE ROWNUM <= 10;
✅ ROWNUM
은 ORDER BY
보다 먼저 평가되므로, 반드시 서브쿼리를 사용하여 정렬 후 제한을 적용해야 합니다.
ROWNUM
을 사용할 경우 ORDER BY
를 적용하기 어렵기 때문에, ROW_NUMBER()
함수를 활용하면 보다 유연한 행 제한이 가능합니다.
SELECT *
FROM (
SELECT employees.*, ROW_NUMBER() OVER (ORDER BY employee_id) AS rn
FROM employees
)
WHERE rn BETWEEN 6 AND 15;
✅ ROW_NUMBER()
를 사용하면 ORDER BY
가 제대로 적용되며, 특정 범위의 행을 가져올 수 있습니다.
방법 | 설명 | 장점 | 단점 |
---|---|---|---|
FETCH FIRST | 최신 SQL 표준 방식 | 간결하고 빠름 | Oracle 12c 이상에서만 사용 가능 |
ROWNUM | 빠르고 간단함 | Oracle 11g 이하에서 사용 가능 | ORDER BY 적용이 어렵고 서브쿼리가 필요함 |
ROW_NUMBER() | ORDER BY 와 함께 유연한 행 제한 가능 | 페이징 처리에 적합 | 성능이 상대적으로 느릴 수 있음 |
FETCH FIRST ... OFFSET
방식 사용 (권장 ✅)ROW_NUMBER()
또는 ROWNUM
사용 ROWNUM
ROW_NUMBER()
이제 버전에 따라 가장 적절한 방법을 사용하여 행 제한을 적용하면 됩니다! 🚀
오늘은 AI 생태계에 혁신적인 변화를 가져올 것으로 예상되는 MCP(Model Context Protocol)에 대해 상세히 알아보겠습니다. 2024년…
1. TPM이란? TPM(Trusted Platform Module)은 국제 표준 기반의 보안 하드웨어 칩으로, 컴퓨터나 디지털 장비 내에서…
시즌2, 기대했는데... 실망도 두 배!두뇌싸움을 기대했는데, 전략도 없는 자기들만의 감정에 따른 편가르기, 정치싸움이 되어 버린…
BPF(Berkeley Packet Filter) 도어는 해커가 관리자 몰래 뒷문을 새로 만든 것입니다.해커가 명령을 내려 특정 데이터들을 뒷문을…
1. IPC의 개념과 목적 1.1 IPC란 무엇인가? IPC (Inter-Process Communication)는 운영체제 내의 서로 독립적인 프로세스…