반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- or some instances in your deployment group are experiencing problems.
- node
- java bigdecimal
- Jenkins
- 도커
- Kafka
- Python
- SQL
- aws cicd
- IntelliJ
- Airflow
- AWS CI/CD 구축하기
- chartjs
- codebuild
- codedeploy
- codepipeline
- Flux
- Spring Error
- chart.js
- docker
- VPN
- PostgreSQL
- JavaScript
- redis
- codedeploy error
- Spring
- bootstrap
- kubeflow
- aws
- COALESCE
Archives
- Today
- Total
Small Asteroid Blog
[SQL] IN, EXISTS 비교 및 속도 비교 본문
728x90
IN
in은 입력된 값들 중 하나라도 일치하는 것이 있으면 조회된다.
쿼리가 실행될 때 내부적으로 or 연산자로 변경되어 실행되는 것이다.
select e.emp_no
from employees.employees e
where emp_no in (SELECT s.emp_no from employees.salaries s);
select e.*
from employees.employees e
where emp_no in (SELECT s.emp_no from employees.salaries s)
employees 데이터는 300,024개
salaries 데이터는 2,844,047개이다
시간 초가 계속 변하긴 하지만
select 값 하나를 조회할 때는 3-5ms
select 값을 전체 조회할 때는 4-5ms 가 걸린다
EXISTS
in 구문과 다르게 메인 쿼리를 가져오고 exists의 서브쿼리를 실행시켜 결과가 존재하는지 판단한다.
in은 비교할 값을 직접 대입할 수 있지만 exists연산자는 서브쿼리만 사용할 수 있다는 특징이 있다.
select e.emp_no
from employees.employees e
where EXISTS (SELECT s.emp_no from employees.salaries s)
select e.*
from employees.employees e
where EXISTS (SELECT s.emp_no from employees.salaries s)
시간 초가 계속 변하긴 하지만
select 값 하나를 조회할 때는 1-3ms
select 값을 전체 조회할 때는 3-4ms 가 걸린다
결론
IN 과 EXISTS의 차이는
EXISTS 는 row 가 존재하는지 체크하고 더이상 수행되지 않지만
IN은 실제 존재하는 데이터들의 모든 값들을 확인한다.
조회하는 데이터가 많지 않은 경우(몇백~몇천) - IN
조회하는 데이터가 많은 경우 - EXISTS
(빠른 속도가 필요한 경우 INNER JOIN )
IN은 EXISTS 에 비해 성능이 떨어진다고 하는데
쿼리 튜닝을 어떻게 하느냐에 따라서 성능이 다르기 때문에
무조건 IN이 EXISTS보다 성능이 나쁜것은 아니다.
728x90
반응형
'백엔드 > DB' 카테고리의 다른 글
[MySQL/Intellij] Public key retrieval is not allowed 에러 해결 (0) | 2023.09.18 |
---|---|
[SQL] MySQL 5.7버전과 8.0버전 차이점, 8.0 업그레이드 (0) | 2023.09.14 |
[DB] MySQL 샘플 데이터 (0) | 2023.09.02 |
[SQL 튜닝] 옵티마이저(optimizer) (0) | 2023.08.27 |
[MySQL] InnoDB란 (0) | 2023.07.27 |