안녕하세요. PostgreSQL 입문한지 얼마되지 않았고 Explain 부분 공부하는 중 이해가 안가는 부분이 있어 초보적인 질문인걸 알면서도 질문드립니다 ㅠ
create table t1 (c1 integer, dummy char(1000));
create table t2 (c1 integer, dummy char(1000));
create table t3 (c1 integer, dummy char(1000));
insert into t1 select generate_series(1,10), 'dummy';
insert into t2 select generate_series(1,1000), 'dummy';
insert into t3 select generate_series(1,10000), 'dummy';
create index t2_idx01 on t2(c1);
create index t3_idx01 on t3(c1);
select *
from t1 a, t2 b, t3 c
where a.c1 = b.c1
and b.c1 = c.c1 ;
Nested Loop (cost=0.56..84.87 rows=10 width=3024)
Join Filter: (a.c1 = b.c1)
-> Nested Loop (cost=0.29..81.22 rows=10 width=2016)
-> Seq Scan on t1 a (cost=0.00..2.10 rows=10 width=1008)
-> Index Scan using t3_idx01 on t3 c (cost=0.29..7.90 rows=1 width=1008)
Index Cond: (c1 = a.c1)
-> Index Scan using t2_idx01 on t2 b (cost=0.28..0.35 rows=1 width=1008)
Index Cond: (c1 = c.c1)
==============================================================================
위에 실행계획을 제가 이해한 바로는 t3_idx01 인덱스를 읽어서 t1 테이블과 Nested 조인한 결과와 t2_idx01 인덱스를 읽은 후 의 결과와 Nested 조인하는게 맞는건가요?
그리고
-> Nested Loop (cost=0.29..81.22 rows=10 width=2016)
-> Seq Scan on t1 a (cost=0.00..2.10 rows=10 width=1008)
-> Index Scan using t3_idx01 on t3 c (cost=0.29..7.90 rows=1 width=1008)
Index Cond: (c1 = a.c1)
SQL에서는 where 절에서 a.c1 = b.c1 조건으로 비교하였는데 위에 처럼
t3_idx01 인덱스 결과와 t1 테이블과 왜 조인하는지 모르겠습니다.ㅠ
|