Search

5-4-3. CLUSTER

-- [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
복사