0Pricing
SQL Academy · 강의

UNION ALL과 UNION 비교(중복 제거 비용)

UNION이 중복 제거 작업을 수행하는 방식을 이해하고 중복이 없다는 것을 알고 있다면 UNION ALL이 더 빠른 이유를 알아봅니다.

UNION ALL과 UNION 비교(중복 제거 비용)은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

차이점

  • UNION — 결합하고 중복을 제거합니다
  • UNION ALL — 결합하고 모든 행을 유지합니다

UNION ALL이 더 빠릅니다

중복 제거에는 비용이 많이 듭니다(정렬 또는 해시). UNION ALL은 이 작업을 완전히 건너뜁니다. 중복이 발생할 수 없다는 것을 알고 있다면 항상 UNION ALL을 선택하세요.

예시: 양쪽 데이터가 서로 겹치지 않을 때

활성 주문과 보관된 주문은 절대 겹치지 않으므로 UNION ALL을 사용합니다.

SELECT * FROM active_orders
UNION ALL
SELECT * FROM archived_orders;

예시: 중복이 중요할 때

반복되는 행이 있을 수 있는 주문 이벤트 목록을 결합하는 경우입니다. 각 발생 횟수를 실제로 세려는 것이라면 UNION ALL을 사용합니다.

SELECT order_id FROM email_events
UNION ALL
SELECT order_id FROM push_events;

예시: 중복을 제거하려는 경우

두 뉴스레터 목록에 일부 이메일이 모두 포함되어 있고, 고유한 이메일마다 한 행씩만 원할 때 사용합니다.

SELECT email FROM list_a
UNION
SELECT email FROM list_b;

서로 다른 원본과 UNION ALL 사용하기

"전체 보고서" 피드에 사용할 지표 테이블을 이어 붙입니다.

SELECT 'login' AS event, ts, user_id FROM logins
UNION ALL
SELECT 'signup',          ts, user_id FROM signups
UNION ALL
SELECT 'purchase',        ts, user_id FROM purchases
ORDER BY ts DESC LIMIT 100;

각 하위 SELECT 내부의 순서

대부분의 데이터베이스는 UNION/UNION ALL의 개별 하위 SELECT 안에 있는 ORDER BY를 무시합니다(괄호로 감싼 경우 제외). ORDER BY는 마지막에 적용하세요.

SELECT ... FROM a
UNION ALL
SELECT ... FROM b
ORDER BY ts DESC;

각 부분에 LIMIT 적용하기

각 부분에 독립적으로 LIMIT를 적용하려면 양쪽을 괄호로 감싸세요.

(SELECT id FROM new_orders ORDER BY created_at DESC LIMIT 10)
UNION ALL
(SELECT id FROM old_orders ORDER BY created_at DESC LIMIT 10);

쿼리 계획기가 UNION을 최적화하는 경우

쿼리 계획기가 두 부분이 서로 겹치지 않는다는 것을 증명할 수 있다면(예: 서로 배타적인 WHERE 필터), UNION을 내부적으로 UNION ALL처럼 실행할 수 있습니다. 하지만 이에 의존하지 마세요. 의도를 명시적으로 표현하세요.

UNION과 OR 비교

동일한 인덱스를 효율적으로 사용할 수 없는 OR 조건에서는 각각 별도의 인덱스를 사용하는 두 쿼리를 UNION ALL로 결합하는 편이 더 빠를 수 있습니다.

-- Slow OR (may not use either index):
SELECT * FROM users WHERE city = 'NYC' OR country = 'DE';

-- Sometimes faster:
SELECT * FROM users WHERE city = 'NYC'
UNION
SELECT * FROM users WHERE country = 'DE';

열 순서 확인

집합 연산자는 이름이 아니라 위치를 기준으로 일치시킵니다. SELECT a, b FROM t1 UNION ALL SELECT b, a FROM t2처럼 사용하면 의미가 뒤바뀌므로 주의하셔야 합니다.

복습

성능을 위해서는 UNION ALL을 기본으로 사용하고, 실제로 중복 제거가 필요할 때만 UNION을 선택하셔야 합니다.

빠른 확인

더 빠른 UNION ALL로 UNION을 언제 바꿀 수 있을까요?

자주 묻는 질문

“UNION ALL과 UNION 비교(중복 제거 비용)” 강의는 무료인가요?

네 — “UNION ALL과 UNION 비교(중복 제거 비용)” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“UNION ALL과 UNION 비교(중복 제거 비용)”에서 뭘 배우나요?

UNION이 중복 제거 작업을 수행하는 방식을 이해하고 중복이 없다는 것을 알고 있다면 UNION ALL이 더 빠른 이유를 알아봅니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

SQL Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“UNION ALL과 UNION 비교(중복 제거 비용)” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. UNION, INTERSECT, EXCEPT
  2. UNION ALL과 UNION 비교(중복 제거 비용)
  3. CASE 표현식과 피벗 쿼리
  4. 교차 집계 패턴(PostgreSQL crosstab())
← SQL Academy(으)로 돌아가기