ax5ui grid paging 오라클 쿼리 0 4 897

by 초보개발자입니다! [SQL Query] #oracle #select #paging #between #axboot [2021.10.18 15:21:39]


안녕하십니까 초보개발자입니다

다름이 아니라 제가 axboot라는 오픈소스를 사용하여 개발중 페이징 처리를 하는데 이 프레임워크의 경우 페이징기능을 하면

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

SELECT ZY.*                               
FROM   (                                  
        SELECT ROWNUM           AS xRnum  
              ,COUNT(*) OVER () AS xRcnt  
              ,ZX.*                       
        FROM   (    제가 작성한 SELECT 쿼리  ) ZX              
       ) ZY                               
WHERE  ZY.xRnum  BETWEEN 1 AND 30;

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

이런식으로 제가 작성한 쿼리 앞뒤로 쿼리를 자동으로 생성하여 SELECT 합니다 

문제는 속도가 너무 오래걸립니다 

예를 들어 총데이터 4만건중 SELECT 조건 데이터 15,000건이고 한페이지에 30건을 보여주는데 검색하는데 6초 정도가 소요됩니다..

페이지 하나 넘길때마다 6~7초가 소요되니 문제가 되고 있습니다.

 

자동으로 붙는 쿼리를 수정할 방법이 없다고 쳤을때 다른방법을 통해 쿼리를 빠르게 조회할 수 있는 방법이 있을까요? 

오라클 페이징쿼리를 검색해서 나온 방법중에 

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

SELECT * 

  FROM(

        SELECT ROWNUM AS RNUM, A.*

            FROM ( 조회할 데이터의 쿼리 ) A

         WHERE ROWNUM <= '조회할 데이터의 최대 ROW'

      )

 WHERE RNUM > '조회할 데이터의 최소값-1';

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

이런 방법도 보았지만 

자동으로 붙는 저 BETWEEN구절때문에 할수가 없더라구요

혹시 방법을 아시는분 계실까요?

by 모래가흙흙 [2021.10.18 15:52:33]

저 프레임워크를 잘 모르지만,   " 조회할 데이터의 쿼리"  부분에  아래처럼 작성이 가능한가요?

  select list..
   from
  ( SELECT list...
     from table_name
    order by col desc )
where rownum <=  '조회할 데이터의 최대 ROW'


by 초보개발자입니다! [2021.10.18 16:20:16]

네 적어주신대로 했더니 확실히 1, 2페이지 속도는 향상될것같습니다 애초에 적은 ROW를 선택하니깐요

근데 뒷쪽페이지를 선택하면 최대ROW가 커지므로 마찬가지로 느린데 이건 해결할 방법이 없겠죠?

 

그리고 만오천건정도 ORDER BY 하면 원래 이리 오래걸리나요? 인텍스는 PK하나 있습니다

ORDER BY PK컬럼 이렇게 합니다

 

 


by 모래가흙흙 [2021.10.18 16:28:09]

아, 제가 알기로는  페이징도  뒤로가면 갈수록  스캔하는양이 많으므로  느려지는 것으로 알고있습니다.  

그래서 목적 자체가 앞쪽 일부만 읽기위한것으로 알고있습니다


by 초보개발자입니다! [2021.10.18 16:41:02]

그렇군요 ㅎㅎ 감사합니다 일단 첫페이지는 빠른속도로 띄우도록 해야겠네요

제가 쓸데없는 생각이 너무 많았던거 같네요 감사합니다

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입