반응형
## DISTINCT
- 가독성은 높아지지만 temp tablespace에 임시로 저장하고 작업하는 방식이라서 시스템에 부하발생가능성 있음
이런식으로 DISTINCT 를 사용할 수 있지만, 첫번째 쿼리는 단지 DEPTNO 중 중복을 제거해주고,
두번째 쿼리는 (DEPTNO, NAME)의 중복을 제거해주기 때문에 모두 출력된다.
- DISTINCT의 성능 고려사항:
- DISTINCT는 데이터 중복을 제거하는 유용한 도구이지만, 대량의 데이터에서 사용할 경우 성능에 영향을 미칠 수 있습니다. DISTINCT는 중복을 제거하기 위해 정렬 작업을 수행하며, 이때 임시 테이블스페이스를 사용해 데이터를 처리하므로 시스템 리소스를 많이 사용할 수 있습니다.
- 대량의 데이터를 처리할 때, 인덱스를 활용하여 중복 제거를 하는 방법이나 필터링 조건을 통해 쿼리를 최적화하는 것이 더 효율적일 수 있습니다.
- DISTINCT와 ORDER BY:
- DISTINCT와 ORDER BY를 함께 사용할 경우, 성능이 더 느려질 수 있습니다. DISTINCT는 중복을 제거하기 위해 데이터를 정렬하는데, 그 후에 ORDER BY로 추가 정렬을 해야 하는 경우가 발생하기 때문입니다.
- 예시:
-
sqlCopy codeSELECT DISTINCT DEPTNO1 FROM STUDENT ORDER BY DEPTNO1;
- 이런 상황에서는 DISTINCT로 인한 불필요한 정렬을 줄이기 위해 인덱스가 유용할 수 있습니다.
- DISTINCT와 UNION의 차이:
- UNION과 DISTINCT는 모두 중복을 제거하는 역할을 하지만, UNION은 두 개 이상의 쿼리 결과를 합친 후 중복을 제거하는 반면, DISTINCT는 단일 쿼리 결과에서만 중복을 제거합니다.
- UNION ALL은 중복을 제거하지 않기 때문에 더 빠른 성능을 제공할 수 있으며, 특정 상황에서는 UNION 대신 UNION ALL을 사용하는 것이 적합할 수 있습니다.
SQL> SELECT DISTINCT DEPTNO1
2 FROM STUDENT;
DEPTNO1
----------
101
103
202
301
201
102
6 rows selected.
SQL> SELECT DISTINCT DEPTNO1, NAME
2 FROM STUDENT;
DEPTNO1 NAME
---------- ----------
103 이미경
201 김문호
201 안은수
103 허우
101 김신영
102 신은경
102 김진욱
202 박동호
201 임세현
301 노정호
201 인영민
DEPTNO1 NAME
---------- ----------
201 김재수
102 서재수
202 오나라
101 일지매
201 안광훈
101 이윤나
102 김주현
101 서진수
301 구유미
20 rows selected.
SQL>
## GROUP BY
- 데이터를 그룹화한 다음 집계 함수를 사용하고자 할 때
GROUP BY 절에 있는 부분은 모두 SELECT 절에 포함되어야 한다.
→ 모든 절이 포함되지 않으면 ORA-00979 에러 발생
SQL> SELECT DEPTNO1 FROM STUDENT GROUP BY DEPTNO1;
DEPTNO1
----------
101
103
202
301
201
102
6 rows selected.
※ 집계함수는 포함되지 않아도 가능
SQL> SELECT DEPTNO1, COUNT(NAME) FROM STUDENT GROUP BY DEPTNO1;
DEPTNO1 COUNT(NAME)
---------- -----------
101 4
103 2
202 2
301 2
201 6
102 4
6 rows selected.
SQL>
DISTINCT vs GROUP BY 성능 비교
- DISTINCT와 GROUP BY의 차이점:
- DISTINCT는 단순히 중복된 행을 제거하는 데 사용되며, 전체 쿼리에 대해 중복된 데이터를 필터링합니다.
- GROUP BY는 데이터를 그룹화하고, 각 그룹에 대해 집계 함수를 적용하는 데 사용됩니다.
- 성능 비교:
- 작은 데이터셋에서는 DISTINCT와 GROUP BY의 성능 차이가 크지 않을 수 있지만, 대량의 데이터를 처리할 때는 GROUP BY가 더 성능이 좋을 수 있습니다.
- 이유는 GROUP BY는 인덱스를 활용할 수 있고, 집계 함수와 함께 사용할 때 최적화가 이루어질 가능성이 크기 때문입니다.
SELECT DEPTNO1 FROM STUDENT GROUP BY DEPTNO1; -- 그룹화 후 중복 제거와 유사한 결과SELECT DISTINCT DEPTNO1 FROM STUDENT; -- 중복 제거
반응형
'ORACLE > Oracle_SQL' 카테고리의 다른 글
인덱스 관련 쿼리 정리 (0) | 2023.07.02 |
---|---|
인덱스 (0) | 2023.06.26 |
시스템 권한부여 (ANY) (0) | 2023.06.25 |
인덱스 생성 속도 향상 (NOLOGGING, PARALLEL) (0) | 2023.06.24 |
시스템 권한 | WITH GRANT/ADMIN OPTION (0) | 2023.06.09 |