2020년 7월 25일 토요일

ORACLE 12C 페이지 나누기 쿼리 -- 기존방식 vs Row Limiting Clause를 이용하는 방법(MySQL의 limit를 오라클에서...)

-----------------------------------------------------------------------------------------------------------

-- ORACLE 12C 페이지 나누기 쿼리

-- 기존방식 vs Row Limiting Clause를 이용하는 방법

-----------------------------------------------------------------------------------------------------------

-- myemp1 테이블(1000만건)에서 ename 칼럼을 기준으로 오름차순 인덱스가 생성되어 있다.

-- create index IDX_MYEMP1_ENAME on myemp1(ename_;

  

-- 한페이지당 10개 출력. 

-- ename를 기준으로 내림차순으로 Dislplay. 

-- 10,000번째 페이지를 출력하는 쿼리를 작성하시오.

-----------------------------------------------------------------------------------------------------------

 

-- 0초

-- 안쪽 SELECT에서 ROWNUM으로 한계치를 미리 지정하여 건수를 줄임

SELECT * 

FROM (      

        SELECT a.*, ROWNUM rnum 

        FROM ( 

              SELECT empno, ename, sal

              FROM   myemp1 e 

              ORDER BY ename DESC

                ) a 

        WHERE ROWNUM <= 10000*10

WHERE rnum >= 9999 * 10 +1;

 

 

-- 0초

-- 안쪽 SELECT에서 ROWNUM으로 한계치를 미리 지정하여 건수를 줄임

-- ORDER BY를 사용안하니 직접 ROWNUM으로 비교 가능하므로 SELECT 절이 하나 빠짐

SELECT empno, ename, sal 

FROM 

        (  

          SELECT /*+ index_desc(e IDX_MYEMP1_ENAME) */ 

                ROWNUM rnum, 

                empno, 

                ename,

                sal 

          FROM  myemp1 e 

          WHERE ROWNUM <= 10000*10 

        ) 

WHERE rnum >= 9999*10+1;

 

-- ORACLE 12C(12.1이상) Row Row Limiting Clause이용

-- 인덱스 스캔이 안되는 경우 4초이상

-- 9999페이지까지는 SKIP하고 그 다음 10000번째 페이지의 10개 추출

SELECT 

          empno, 

          ename,

          sal  

FROM   myemp1 e

ORDER BY ename DESC

OFFSET 9999*10  ROWS FETCH NEXT 10 ROWS ONLY;

 

-- ORACLE 12C(12.1이상) Row Row Limiting Clause이용

-- 인덱스 스캔이 되는 경우 0초

-- 9999페이지까지는 SKIP하고 그 다음 10000번째 페이지의 10개 추출

SELECT  /*+ index_desc(e IDX_MYEMP1_ENAME) */ 

          empno, 

          ename,

          sal  

FROM   myemp1 e

WHERE  ename > '가'

ORDER BY ename DESC

OFFSET 9999*10  ROWS FETCH NEXT 10 ROWS ONLY;

 

-- 만약 MySQL이라면 디음과 같이하면 된다.

SELECT * 

FROM myemp1

ORDER BY ename

LIMIT 9999*10,10;  -- 9999번째 페이지까지 스킵하고 10개를 추출


https://youtu.be/bYa4cIA_5vo

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...