sql - 컬럼 - union 과 union all 성능




UNION과 UNION ALL의 차이점은 무엇입니까? (15)

UNIONUNION ALL 의 차이점은 무엇입니까?



그것이 어떤 데이터베이스에 중요한지 확신하지 못함

UNIONUNION ALL 은 모든 SQL Server에서 작동해야합니다.

불필요한 UNION 피해야합니다. UNION 은 거대한 성능 누수입니다. 사용법을 잘 모르는 경우 엄지 손가락 규칙에 따라 UNION ALL 을 사용하십시오.


ORACLE에서 : UNION은 BLOB (또는 CLOB) 열 유형을 지원하지 않으며 UNION ALL은 BLOB (또는 CLOB) 열 유형을 지원하지 않습니다.


UNION - 별개의 레코드 결과

동안

UNION ALL - 중복을 포함하여 모든 레코드가 생성됩니다.

둘 다 연산자를 차단하므로 개인적으로 언제든지 차단 연산자 (UNION, INTERSECT, UNION ALL 등)보다 JOINS를 사용하는 것을 선호합니다.

Union All checkout과 비교하여 Union 작업이 왜 성능이 좋지 않은지 설명하려면 다음 예제를 참조하십시오.

CREATE TABLE #T1 (data VARCHAR(10))

INSERT INTO #T1
SELECT 'abc'
UNION ALL
SELECT 'bcd'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'def'
UNION ALL
SELECT 'efg'


CREATE TABLE #T2 (data VARCHAR(10))

INSERT INTO #T2
SELECT 'abc'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'efg'

다음은 UNION ALL 및 UNION 작업의 결과입니다.

UNION 문은 결과 집합에서 SELECT DISTINCT를 효과적으로 수행합니다. 반환 된 모든 레코드가 유니온에서 고유하다는 것을 알고 있다면 UNION ALL을 대신 사용하면 더 빠른 결과를 얻을 수 있습니다.

UNION을 사용하면 Execution Plan의 Distinct Sort 작업이 수행됩니다. 이 진술서를 증명하는 증거는 아래와 같습니다.


UNION과 UNION ALL 모두 두 개의 서로 다른 SQL의 결과를 연결합니다. 그들은 중복을 다루는 방식이 다릅니다.

  • UNION은 중복 행을 제거하여 결과 세트에 DISTINCT를 수행합니다.

  • UNION ALL은 중복을 제거하지 않으므로 UNION보다 빠릅니다.

주 : 이 명령을 사용하는 동안 선택된 모든 열은 동일한 데이터 유형이어야합니다.

예 : 직원이 2 명이고 고객이 2 명인 경우

  1. 직원 테이블 데이터 :

  1. 고객 테이블 데이터 :

  1. UNION 예제 (모든 중복 레코드를 제거함) :

  1. UNION ALL 예제 (레코드를 연결하고 중복을 제거하지 않으므로 UNION보다 빠름) :


UNION은 중복 레코드를 제거합니다. UNION ALL은 그렇지 않습니다. 그러나 처리 할 데이터의 대량을 확인해야하며 열과 데이터 유형은 동일해야합니다.

노동 조합은 내부적으로 행을 선택하기 위해 "고유 한"동작을 사용하므로 시간과 성능 측면에서 비용이 많이 듭니다. 처럼

select project_id from t_project
union
select project_id from t_project_contact  

이게 나에게 2020 개의 레코드를 준다.

다른 손에

select project_id from t_project
union all
select project_id from t_project_contact

나를 17402 개 이상의 행을 제공합니다.

우선 순위 관점에서 둘 다 우선 순위가 같습니다.


나는 예제를 추가한다.

UNION , 비교가 필요하기 때문에 별개 -> 느리게 병합됩니다 (Oracle SQL 개발자는 쿼리를 선택하고 비용 분석을 보려면 F10 키를 누릅니다).

UNION ALL , 그것은 뚜렷한 병합없이 빠르게 병합됩니다.

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION ALL
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

내가 추가하고 싶은 한가지 더 -

조합 : 결과 집합은 오름차순으로 정렬됩니다.

조합 모두 : - 결과 집합이 정렬되지 않았습니다. 두 개의 Query 출력이 추가됩니다.


아주 간단한 말로 UNION과 UNION ALL의 차이는 UNION이 중복 레코드를 생략하고 UNION ALL은 중복 레코드를 포함한다는 것입니다.


여기서 두 개의 센트를 여기에 추가하기 만하면 UNION 연산자를 순수 SET 중심 UNION으로 이해할 수 있습니다. 예를 들어 집합 A = {2,4,6,8}, 집합 B = {1,2,3, 4}, A 유니온 B = {1,2,3,4,6,8}

세트를 다룰 때, 요소 세트에 있거나 없기 때문에 숫자 2와 4가 두 번 나타나는 것을 원하지 않을 것입니다.

하지만 SQL의 세계에서는 두 세트의 모든 요소를 ​​하나의 "가방"{2,4,6,8,1,2,3,4}에 모두 표시하려고 할 수 있습니다. 이 목적을 위해 T-SQL은 UNION ALL 연산자를 제공합니다.


ORDER BY 가 없다면 UNION ALL 은 행을 되돌릴 수 있지만 UNION 은 전체 결과를 한 번에 보내기 전에 쿼리의 끝까지 기다리게합니다. 이것은 타임 아웃 상황에 차이를 만들 수 있습니다. UNION ALL 은 연결 상태를 그대로 유지합니다.

따라서 시간 초과 문제가 있고 정렬이없고 중복이 문제가되지 않으면 UNION ALL 이 도움이 될 수 있습니다.


UNION 은 중복 레코드를 제거합니다 (결과의 모든 열은 동일 함). UNION ALL 은 그렇지 않습니다.

UNION ALL 대신 UNION 을 사용할 때 성능이 저하됩니다. 데이터베이스 서버는 중복 행을 제거하기 위해 추가 작업을해야하지만 일반적으로 중복을 원하지 않습니다 (특히 보고서를 개발할 때).

UNION 예 :

SELECT 'foo' AS bar UNION SELECT 'foo' AS bar

결과:

+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)

UNION ALL 예제 :

SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar

결과:

+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)

UNION 은 두 개의 구조적으로 호환되는 테이블의 내용을 하나의 결합 된 테이블로 병합합니다.

  • 차:

UNIONUNION ALL 의 차이점은 UNION UNION will 중복 레코드 UNION will 생략하고 UNION ALL 은 중복 레코드를 포함한다는 것입니다.

Union 결과 집합은 오름차순으로 정렬되는 반면 UNION ALL 결과 집합은 정렬되지 않습니다

UNION 은 결과 집합에 DISTINCT 를 수행하여 중복 행을 제거합니다. UNION ALL 은 중복을 제거하지 않으므로 UNION 보다 빠릅니다. *

: UNION 은 중복을 제거하기위한 추가 작업을 UNION 요구하므로 일반적으로 UNION ALL 의 성능이 UNION ALL 보다 우수합니다. 따라서 중복이없는 것이 확실하거나 중복이 문제가되지 않는 경우 성능상의 이유로 UNION ALL 사용하는 것이 좋습니다.


Teacher & Student 테이블이 두 개인 경우

다이 이름다른 4 개의 열 이 있습니다.

Teacher - ID(int), Name(varchar(50)), Address(varchar(50)), PositionID(varchar(50))

Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)

동일한 수의 열을 가진 두 테이블에 대해 UNION 또는 UNION ALL을 적용 할 수 있습니다. 하지만 이름이나 데이터 유형이 다릅니다.

UNION 연산을 2 개의 테이블에 적용하면 모든 중복 항목 (테이블의 행의 모든 ​​열 값이 다른 테이블과 동일 함)이 무시됩니다. 이처럼

SELECT * FROM Student
UNION
SELECT * FROM Teacher

결과는

UNION ALL 연산을 2 개의 테이블에 적용하면 중복 된 모든 항목을 반환합니다 (2 개의 테이블에있는 행의 열 값간에 차이가있는 경우). 이처럼

SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher

산출

공연:

UNION ALL 성능은 UNION 이 중복 값을 제거하는 추가 작업을 수행 할 때 더 좋습니다. MSSQL 에서 ctrl + L 을 눌러 실행 예상 시간 에서 확인할 수 있습니다.


유니온 대 유니온 ALL의 차이점

SQL에서 연합이란 무엇입니까?

UNION 연산자는 두 개 이상의 데이터 집합의 결과 집합을 결합하는 데 사용됩니다.

Each SELECT statement within UNION must have the same number of columns
The columns must also have similar data types
The columns in each SELECT statement must also be in the same order

유니온 대 노조 모두 함께 예





union-all