728x90
반응형
SELECT *
FROM (SELECT colA, colB FROM tableA
UNION
SELECT colA, colB FROM tableB)
WHERE colA > 1
https://stackoverflow.com/questions/5437507/union-with-where-clause
UNION with WHERE clause
I'm doing a UNION of two queries on an Oracle database. Both of them have a WHERE clause. Is there a difference in the performance if I do the WHERE after UNIONing the queries compared to performin...
stackoverflow.com
CASE 1) 각 각의 table에 where 절을 먼저 사용
SELECT colA, colB FROM tableA WHERE colA > 1
UNION
SELECT colA, colB FROM tableB WHERE colA > 1
CASE 2) UNION 후 where 사용
SELECT *
FROM (SELECT colA, colB FROM tableA
UNION
SELECT colA, colB FROM tableB)
WHERE colA > 1
EXPLAIN을 사용할 수 있는 환경이라면 Optimizer가 똑똑해서 두 쿼리의 차이는 크게 나지 않는다. 하지만 버전이 낮은 환경에서 작업시 Full Scan인가를 따져봐야한다. CASE1의 경우 tableA에서 Where절의 구문이 index가 잡힌 컬럼인지가 중요하다. 그렇지 않을 경우 tableA, tableB 두 Where절을 수행한 후 view를 생성하기 때문에 느려진다. CASE2의 경우 두 테이블 모두 Full Scan 후 Where 절을 사용하기 때문에 성능 차이가 없다.
위에 두 경우 처럼 깔끔한 쿼리는 없기에 항상 index를 사용하는지 EXPLAIN과 relation을 따져 봐야한다.
반응형
'Database' 카테고리의 다른 글
[MySQL] You have an error in your SQL syntax .. 너의 Query는 틀렸어,, (0) | 2024.02.10 |
---|---|
[Airflow] airflow-init alembic.script.revision.ResolutionError: No such revision or branch 오류 (0) | 2023.12.20 |
[Airflow] airflow db 초기화 오류 (0) | 2023.12.20 |
[airflow] airflow root 권한 docker 접속 (0) | 2023.11.26 |
[airflow] airflow-init-1 exited (0) | 2023.11.26 |