ComputerLanguage_Program/SQL
[SQL] not in 과 left join 연산 시간 비교 실험(2/2)
pbj0812
2020. 10. 15. 22:46
0. 목표
- not in 과 left join 연산 시간 비교 실험
- index 변경 / 추가
1. 실습 준비
1) 데이터 및 테이블 생성 (링크)
2) index 확인
- 없음
SHOW INDEX FROM sql_test.df_a;
SHOW INDEX FROM sql_test.df_b;
3) 테이블에 index 추가
ALTER TABLE sql_test.df_a ADD INDEX idx (a);
ALTER TABLE sql_test.df_b ADD INDEX idx (a);
4) index 확인
- btree 형식
SHOW INDEX FROM sql_test.df_a;
SHOW INDEX FROM sql_test.df_b;
2. 실습1
1) not in 을 통한 연산
- 0.084 sec / 0.0000081 sec
SELECT COUNT(A.a)
FROM sql_test.df_a AS A
WHERE
A.a not in (
SELECT a FROM sql_test.df_b);
2) left join 을 통한 연산
- 0.215 sec / 0.000015 sec
SELECT COUNT(A.a)
FROM sql_test.df_a AS A
LEFT JOIN sql_test.df_b AS B
ON A.a = B.a
WHERE B.a IS NULL;
3. 실습2
- pk 부여
ALTER TABLE sql_test.df_a ADD PRIMARY KEY (a);
ALTER TABLE sql_test.df_b ADD PRIMARY KEY (a);
1) not in 을 통한 연산
- 0.039 sec / 0.000017 sec
- index 만을 부여하였을 때 대비 연산시간이 절반으로 감소
SELECT COUNT(A.a)
FROM sql_test.df_a AS A
WHERE
A.a not in (
SELECT a FROM sql_test.df_b);
2) left join 을 통한 연산
- 0.337 sec / 0.0000081 sec
- index 만을 부여하였을 때 대비 연산시간이 1.5배 증가
SELECT COUNT(A.a)
FROM sql_test.df_a AS A
LEFT JOIN sql_test.df_b AS B
ON A.a = B.a
WHERE B.a IS NULL;
4. 결과
- index 를 부여하면 하지 않았을 때 대비하여 시간이 확연히 주는 것을 확인
- not in 보다 left join이 연산량이 빠르다는 것도 항상 옳은 이야기는 아님