💡 아래 두 SQL 중 어느것이 Sort Area를 적게 사용할까?
-- 1번 쿼리
-- 레코드당 107(30+30+10+20+17) 바이트로 가공한 결과집합을 Sort Area에 담는다.
select lpad(상품번호, 30) || lpad(상품명, 30) || lpad(고객id, 10)
|| lpad(고객명, 20) || to_char(주문일시, 'yyyymmdd hh24:mi:ss')
from 주문상품
where 주문일시 between :start and :end
order by 상품번호
---------------------------------------------------------------------------
-- 2번 쿼리
-- 가공하지 않은 상태로 정렬을 완료 한 후 최종 출력할 때, 가공한다.
-- (2번 쿼리가 Sort Area를 훨씬 적게 사용한다.)
select lpad(상품번호, 30) || lpad(상품명, 30) || lpad(고객id, 10)
|| lpad(고객명, 20) || to_char(주문일시, 'yyyymmdd hh24:mi:ss')
from (
select 상품번호, 상품명, 고객id, 고객명, 주문일시
from 주문상품
where 주문일시 between :start and :end
order by 상품번호
)
💡 아래 두 SQL 중 어느것이 Sort Area를 적게 사용할까?
-- 1번 쿼리
-- 모든 컬럼을 Sort Area에 저장한다. (716MB / 14.41sec)
select * from 예수금원장 order by 총예수금 desc
-- 2번 쿼리
-- 계좌번호, 총예수금만 Sort Area에 저장한다. (17M / 1.2sec)
select 계좌번호, 총예수금 from 예수금원장 order by 총예수금 desc
select *
from (
select rownum no, a.*
from (
select 거래일시, 체결건수, 체결수량, 거래대금
from 종목거래
where 종목코드 = 'KR123456'
and 거래일시 >= '20180304'
order by 거래일시
) a
where rownum <= (:page * 10)
)
where no >= (:page-1) * 10 + 1
---------------------------------------------------------------
0 | STATEMENT
10 | COUNT STOPKEY
10 | VIEW
10 | SORT ORDER BY STOPKEY
49857 | TABLE ACCESS FULL
SELECT *
FROM (
SELECT rownum no , a.*
FROM (
SELECT 거래일시, 체결건수, 체결수량, 거래대금
FROM 종목거래
WHERE 종목거래 = ‘KR123456’
AND 거래일시 >= ‘20180304’
ORDER BY 거래일시
) a
-- WHERE rownum <= (:page * 10)
)
WHERE no between (:page-1) * 10 + 1 and (:page * 10)
-----------------------------------------------------
0 SATEMENT
10 VIEW
49857 COUNT
49857 VIEW
49857 SORT ORDER BY
49857 TABLE ACCESS FULL 종목거래
윈도우 함수 rank나 row_number는 max보다 부하가 적다.