DB

[SQL]오라클 SQL과 PL/SQL - 1장

yong_ღ'ᴗ'ღ 2023. 2. 28. 04:08

✔ DISTINCT 명령어

- 오라클 9i 버전까지는 DISTINCT 있으면 정렬 수행해서 심각한 속도 저하 발생했으나,

   오라클 10g R2 버전부터는 HASH 알고리즘 사용하는 방식으로 변경되어 정렬하지 않아 성능 많이 향상되었음

   그래서 정렬 필요하면 별도로 작업해줘야 함

- DISTINCT 키워드는 반드시 SELECT 키워드 다음에 와야 함

- DISTINCT 키워드는 1개의 컬럼에만 적어도 모든 컬럼에 적용된다. 이로 인해 성능 저하 발생할 수 있으니 주의해서

  사용해야 함! 

  잘 모르고 사용하면 사용하면 속도 느려지니 잘 고민하고 반드시 써야하는 곳에만 쓰기!

  SELECT DISTINCT job, ename ~~

  → 결과에 중복되는 job이 안나오는 거 X

       DISTINCT가 job과 ename 컬럼에 모두 적용된다.

 

✔ 특정 구간의 값을 검색할 때, 가급적 BETWEEN 연산자 쓰지 말고, 비교 연산자 쓰는 걸 권장

    비교 연산자가 속도 면에서 더 빠르다.

 

✔ IN 연산자: 속도가 빨라서 아주 많이 사용됨

 

✔ LIKE 연산자: 절대로 %나 _를 가장 먼저 쓰면 안 된다!

    LIKE 연산자 사용할 때, '%', '_' 위치 아주 중요하다.

    %나 _rk 가 뒤의 조건 부분에서 가장 먼저 나올 경우, SQL의 성능은 대부분 최악으로 늦어질 경우 많다. (인덱스 때문에)

    ex) LIKE '%김%' , LIKE '_김%'

 

최대한 ORDER BY는 사용하지 말기

    ORDER BY 많이 사용할 수록 SQL 수행 속도가 늦어진다.

    그래서 실전에서 많이 사용하는 방법이 → 인덱스(INDEX)

 

✔ 집합 연산자

연산자 종류 내용
UNION 두 집합의 결과 합쳐서 출력. 중복 제거 O, 정렬 O
UNION ALL 두 집합의 결과 합쳐서 출력. 중복 제거 X, 정렬 X
INTERSECT 두 집합의 교집합 출력. 정렬 O
MINUS 두 집합의 차집합 출력. 정렬 O. 쿼리의 순서 중요함

- 집합 연산자 사용할 때 주의사항

1) 두 집합의 SELECT 절에 오는 컬럼 개수 같아야 함

2) 두 집합의 SELECT 절에 오는 컬럼의 데이터 타입 같아야 함 (두 집합의 컬럼명은 달라도 상관없음)

- UNION으로 많이 연결할수록 SQL의 성능 아주 많이 떨어지게 된다.

  가급적 UNION보다 DECODE나 CASE 등 다른 방법을 사용하는 게 좋음

- 정렬을 동반하는 연산자는 많은 데이터를 대상으로 할 경우, 속도가 느려진다.