코드 :
--오늘의 자습 시간 문제_2026_01_28
--문제1. 아래의 SQL이 buffer 의 갯수가 더 줄어들 수 있도록 인덱스를 생성하시오
--변경 전
select count(*)
from orders_range_interval
where order_dt >= to_date('2024-03-01','RRRR-MM-DD')
and order_dt < to_date('2024-04-01','RRRR-MM-DD');
SELECT * FROM table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));
--변경 후
create index orders_range_interval_order_dt_idx on orders_range_interval(order_dt);
select /*+ index(t orders_range_interval_order_dt_idx)*/ count(*)
from orders_range_interval t
where order_dt >= to_date('2024-03-01','RRRR-MM-DD')
and order_dt < to_date('2024-04-01','RRRR-MM-DD');
SELECT * FROM table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));
코드 :
--문제2. fact_order_heap 테이블을 가지고 interval 파티션을 만드는데 파티션 키를 order_dt 로 생성하고
--기준을 월로 해서 생성하시오
select * from fact_order_heap;
--데이터 사전 확인
select distinct to_char(order_dt,'RRRR-MM') from fact_order_heap order by 1;
CREATE TABLE fact_order_range_interval
(
order_id NUMBER NOT NULL,
order_dt DATE NOT NULL,
customer_id NUMBER NOT NULL,
amount NUMBER(12,2) NOT NULL,
region VARCHAR2(10) NOT NULL, -- 예: SEOUL/BUSAN/...
channel VARCHAR2(10) NOT NULL -- 예: ONLINE/OFFLINE
)PARTITION BY RANGE (order_dt)
interval ( numtoyminterval(1, 'MONTH') )
(
PARTITION p202401 VALUES LESS THAN (DATE '2024-02-01')
);
--데이터 이관
insert into fact_order_range_interval
select * from fact_order_heap;
select * from fact_order_range_interval;
--count : 2000000
코드 :
--문제3. 위의 fact_order_heap 테이블로 만든 interval 파티션의 속도를
--높일 수 있도록 버퍼를 줄일 수 있는 인덱스를 생성하고 튜닝전과 튜닝후를 비교하시오
--(이수자 평가 9번 유형)
--튜닝 전
select count(*)
from fact_order_range_interval
where order_dt >= to_date('2024-03-01','RRRR-MM-DD')
and order_dt < to_date('2024-04-01','RRRR-MM-DD')
and customer_id = 61;
SELECT * FROM table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));
--튜닝 후
--인덱스 생성
create index fact_order_range_interval_order_dt_customer_id_idx on fact_order_range_interval(order_dt,customer_id);
select /*+ index(t fact_order_range_interval_order_dt_customer_id_idx)*/count(*)
from fact_order_range_interval t
where order_dt >= to_date('2024-03-01','RRRR-MM-DD')
and order_dt < to_date('2024-04-01','RRRR-MM-DD')
and customer_id = 61;
SELECT * FROM table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));