하드웨어적 방법을 통해 I/O의 성능을 높이는 것도 좋지만, 애플리케이션 측면에서 논리적인 I/O의 요청 횟수를 최소화하는 것이 I/O효율화 튜닝의 핵심이다.
필요한 최소 블록만 읽도록 쿼리작성
SELECT *
FROM (
SELECT ROWNUM NO, 등록일자, 번호, 제목, 회원명, 게시판유형명, 질문유형명, 아이콘, 댓글개수
FROM (
SELECT A.등록일자, A.번호, A.제목, B.회원명, C.게시판유형명, D.질문유형명, FUNC_ICON(D.질문유형코드) 아이콘, (SELECT..) 댓글개수
FROM 게시판 A, 회원 B, 게시판유형 C, 질문유형 D
WHERE A.게시판유형 = :TYPE
AND B.회원번호 = A.작성자번호
AND C.게시판유형 = A.게시판유형
AND D.질문유형 = A.질문유형
ORDER BY A.등록일자 DESC, A.질문유형, A.번호
)
WHERE ROWNUM <= 30
)
WHERE NO BETWEEN 21 AND 30
SELECT /*+ ORDERED USE_NL(B) USE_NL(C) USE_NL(D) */
A.등록일자, A.번호, A.제목, B.회원명, C.게시판유형명, D.질문유형명, FUNC_ICON(D.질문유형코드) 아이콘, (SELECT..) 댓글개수
FROM (
SELECT A.*, ROWNUM NO ROWNUM NO
FROM (
SELECT 등록일자, 번호, 제목, 작성자번호, 게시판유형, 질문유형
FROM 게시판
WHERE 게시판유형 = :TYPE
AND 작성자번호 IS NOT NULL
AND 게시판유형 IS NOT NULL
AND 질문유형 IS NOT NULL
ORDER BY 등록일자 DESC, 질문유형, 번호
) A
WHERE ROWNUM <= 30
)A 회원 B, 게시판유형 C, 질문유형 D
WHERE A.NO BETWEEN 21 AND 30
AND B.회원번호 = A.작성자번호
AND C.게시판유형 = A.게시판유형
AND D.질문유형 = A.질문유형
select a . 종목코드
, a . 거래량_전일_거래량, a . 거래대금_전일_거래대금
, a . 상한가 _전일_상한가, a . 하한가_전일_하한가
, b. 거래량 주간 거래량, b . 거래 대금 주간 거 래대금
, c . 거래량 전월 총거래량, c . 거 래대금 전월 총거 래대금
, d . 시가총액 전월말 시가총액
, e . 거래량 연중 최 대 거래량, e. 거래대금 연중 최대거래대금
, e . 상한가 연중 상한가, e. 하한가 연중 하한가
from
(select 종목코드,거래량, 거 래대금, 상한가,하한가
from 일별종목거래
where 거래일자 = to char(sysdate- 1, ' yyyymrdd ' ) ) a
, (select 종목묘드, sum (거래량)거래량 , sum(거래대금) 거래대금
from 일별종목거래
where 거래일자 between to char (sysdate-7, ' yyyymrdd ' )
and to char(sysdate- 1, ' yyyymrdd' )
group by 종목코드) b
, (select 종목표드, sum ( 거래량) 거래량, sum ( 거 래대금) 거래대금
from 일별종목거래
where 거래일자 like to char (add months (sysdate, -1) , ' yyyynm' ) || '%'
group by 종목코드) c
, (select 종목코드_상장주식수 * 종가 시가총액
from 일별종목거래
where 거래일자 = to char (last day (add months(sysdate, - 1) ) , ' yyyymmdd ') ) d
, (select 종목코드,max(거래량) 거래랑, max(거래대금) 거래대금
, max(종가) 상한가, min(종가) 하한가
from 일별종목거래
where 거래일자 between to char(add months (sysdate, - 12) , ' yyyymmdd ' )
and to char(sysdate-1, ' yyyymmdd ' )
group by 종목코드) e
where
and b . 종목코드(+) = a . 종목코드
and c . 종목묘드(+) = a . 종목코드
and d . 종목코드(+) = a . 종목코드
and e . 종목코드( +) = a . 종목묘드
select 종목묘드
, sum (case when 거 래 일자 = to char(sysdate-1, 'yyyymmdd' )
then 거래량 end) 전일 거래량
, sum (case when 거래일자 = to char(sysdate-1, ' yyyymmdd' )
then 거래대금 end) 전일 거래대금
, max (case when 거 래 일자 = t o char(sysdate-1, ' yyyymmdd' )
then 종가 end) 전일 상한가
, min (case when 거래일자 to char(sysdate- 1, ' yyyymmdd' )
then 종가 end) 전일 하한가
, sum(case when 거래일자 between to char (sysdate-7, ' yyyymmdd ' )
and to char (sysdate-1, ' Yyyyymmdd ' )
then 거래량 end) 주간 거래량
, sum(case when 거래일자 between to char (sysdate-7, ' yyyymmdd ' )
and to char (sysdate-1, ' yyyymmdd' )
then 거래대금 end) 주간 거래대금
, sum (case when 거래일자 like to char (add months (sysdate, - 1) , ' yyyyrrm ' ) ||'%'
then 거래량 end) 전월 총거래량
, sum(case when 거래일자 like t o char(add months(sysdate, - 1) , ' yyyyrrm ' )||'%'
then 거래대금 end) 전월 총거래대금
, sum(case when 거래일자 = to char (last day (add months (sysdate, - 1) ) , ' yyyymmdd' ')
then 상정주식수 * 종가 end) 전월말 시가총액
, max(거래량) 연중 최대거래량
, max ( 거래대금) 연중 최대거래대금
, max (종가) 연중 상한가
, min(종가) 연중 하한가
from 일별종목거래
where 거래일자 between to char (add months(sysdate, - 12) , 'yyyymmdd' )
and to char (sysdate- 1, ' yyyymmdd ' )
group by 종목코드
having sum(case when 거래일자 = to char(sysdate- 1, 'yyyymmdd' ) then 거래량 end) > 0
최적의 옵티마이져 팩터 제공
통계정보의 중요성