안녕하세요. 늅늅입니다.
쿼리가 느려서 찾아 보니 도무지 해결이 안되어 선배님들의 조언을 부탁드립니다.
평범한 페이징입니다.
1 ~ 100 데이터를 가지고 올때는 1초로 끝나는데
1 ~ 1000 데이터를 가지고 올때는 1초로 끝나는데
2 ~ 100 데이터를 가지고 올때는 4~5초가 걸립니다.
셋다 실행계획 같은데 왜 이럴까요?
------------------------------------------
oracle 버젼 : Oracle Database 11g 11.2.0.4.0 64bit Production
DB tool : sqlgate, sqldeveloper
------------------------------------------
SELECT PL.* FROM (
SELECT LI.*,ROWNUM AS RNUM FROM (
쿼리....
)LI
)PL WHERE RNUM BETWEEN 1 AND 100;
-- 1에서 100 페이징시 1초 내외로 끝남
-- 1에서 1000 페이징시 1초 내외로 끝남
-- 2에서 100 페이징시 4~5초 정도 걸림
-- 2에서 1000 페이징시 1초 내외로 끝남
SELECT pl.*
FROM (SELECT li.*
, ROWNUM AS rnum
FROM (
-- 쿼리.... -- 여기 비효율은 없는지 살펴볼 필요 있음.
) li
WHERE ROWNUM <= 100 -- 여기 조건 추가 --
) pl
WHERE rnum BETWEEN 2 AND 100
;
오! 이렇게 하니깐 1초에 끝나네요.
감사 합니다.
그런데 이건 뭐 때문에 이런건가요?
전체를 읽은뒤 2에서 100을 읽으니까요..
그전에 100까지 자름
답변 채택을 잘못 눌렀..네요.. 답변 감사합니다.
실행계획 / SQL / INDEX 정보 전부 올려주세요.
첨부로 실행계획 첨부 했습니다.
다른 SQL, INDEX 테이블 정보가 있어서 올리기가 힘드네요.. ㅠㅠ
답변 감사 합니다.
검색되는 양이 많네요.
유니크 인덱스 기준되는 테이블을 기준으로 JOIN 걸어 푸는게 좋을것 같은데요.
넵 감사 합니다. 데이터 량을 줄일 방법을 찾아봐야겠네요.