-- [SQL-5-4-3-a]
EXPLAIN (ANALYZE,BUFFERS,COSTS OFF)
SELECT t1.*
FROM startdbpg.tr_ord_big t1
WHERE t1.ord_dtm >= '2024-12-01'::date
AND t1.ord_dtm < '2025-01-01'::date;
SQL
복사
-- [SQL-5-4-3-b]
EXPLAIN (ANALYZE,BUFFERS,COSTS OFF)
SELECT /*+ IndexScan(t1) */
t1.*
FROM startdbpg.tr_ord_big t1
WHERE t1.shop_id = 'S010';
SQL
복사
-- [SQL-5-4-3-c]
SELECT t1.attname -- 컬럼명
,t1.correlation -- 테이블의 실제 데이터 정렬과 해당 컬럼의 정렬에 대한 상관계수
FROM pg_stats t1
WHERE t1.tablename = 'tr_ord_big'
AND t1.attname in ('ord_dtm','shop_id')
ORDER BY t1.correlation DESC;
SQL
복사
-- [SQL-5-4-3-d]
DROP TABLE IF EXISTS startdbpg.tr_ord_big_shop;
CREATE TABLE startdbpg.tr_ord_big_shop as
SELECT * FROM startdbpg.tr_ord_big; -- 48초
CREATE INDEX tr_ord_big_shop_x01 ON startdbpg.tr_ord_big_shop(ord_dtm); -- 8초
CREATE INDEX tr_ord_big_shop_x02 ON startdbpg.tr_ord_big_shop(shop_id); -- 21초
SQL
복사
-- [SQL-5-4-3-e]
CLUSTER startdbpg.tr_ord_big_shop USING tr_ord_big_shop_x02; -- 2분
VACUUM startdbpg.tr_ord_big_shop;
ANALYZE startdbpg.tr_ord_big_shop;
SQL
복사
-- [SQL-5-4-3-f]
SELECT t1.attname -- 컬럼명
,t1.correlation -- 테이블의 실제 데이터 정렬과 해당 컬럼의 정렬에 대한 상관계수
FROM pg_stats t1
WHERE t1.tablename = 'tr_ord_big_shop'
AND t1.attname in ('ord_dtm','shop_id')
ORDER BY t1.correlation DESC;
SQL
복사
-- [SQL-5-4-3-g]: [SQL-5-4-3-a]와 동일(대상 테이블 변경, 힌트 추가), x01(ord_dtm)로 73만 건 조회
EXPLAIN (ANALYZE,BUFFERS,COSTS OFF)
SELECT /*+ IndexScan(t1) */ -- > IndexScan 힌트 추가
t1.*
FROM startdbpg.tr_ord_big_shop t1 -- > 대상 테이블 변경
WHERE t1.ord_dtm >= '2024-12-01'::date
AND t1.ord_dtm < '2025-01-01'::date;
SQL
복사
-- [SQL-5-4-3-h]: [SQL-5-4-3-b]와 동일(대상 테이블 변경, 힌트 제거), x02(shop_id)로 약 64만 건 조회
EXPLAIN (ANALYZE,BUFFERS,COSTS OFF)
-- > IndexScan 힌트 제거
SELECT t1.*
FROM startdbpg.tr_ord_big_shop t1 -- > 대상 테이블 변경
WHERE t1.shop_id = 'S010';
SQL
복사



