<TIL> 115. 쿼리 최적화

YUJIN LEE·2023년 5월 10일
0

개발log

목록 보기
105/149
  1. select * 사용 금지
    -> 필요한 컬럼만 조회해서 불필요한 리소스 방지

  2. Like 검색 시 와일드카드(%) 끝에 작성

  • Like 검색 시 와일드카드가 시작 부분에 있으면 인덱스를 활용하지 않는다.
    -> 모든 레코드를 검색해 검색 속도 저하
  1. 중복 제거
    UNION과 DISTINCT를 같이 사용 XXX

UNION에는 중복 값을 제거하는 기능 존재해 같이 사용할 필요X

Distinct와 Group By를 같이 사용XXX

Group By 절에 입력된 칼럼을 그룹화해서 Distinct와 사용할 필요X

  1. Order ByX

RDBMS마다 다르지만 서브 쿼리에서 Order By를 사용할 경우 많은 비용 발생

  1. In 대신 Exists 사용
    where문에서 서브 쿼리의 값을 확인할 경우 -> IN or Exists 사용

서브 쿼리의 결과가 많으면 Exists가 더 나은 성능 제공.
그렇지 않으면 In 사용

?
Exists는 일치하는 항목이 발견되는 즉시 검색 프로세스를 종료하지만,
In은 모든 항목을 비교해서.

  1. Where문에 함수 사용 제한
    인덱스로 잡혀있는 컬럼은 where문 or join에서 함수와 사용하는 것을 피해야함.

(조건 부여 시, 가급적 기존 DB값에 별도의 연산 X
->

  1. 암시적 변환 금지
    암시적변환은 DB에서 값을 비교 시, 데이터 타입이 다른 경우 DB에서 자동으로 타입을 변환 후 값을 비교하는 방식

암시적 변환은 수행하는데 불필요한 리소스가 소모되어 동일한 타입으로 값을 비교하는게 좋다.

  1. 같은 내용의 조건이라면, Group By 연산시에는 가급적 Having보단 where절 사용

쿼리 실행 순서에서, where절이 having절보다 먼저 실행.
where절로 미리 데이터 크기를 작게 만들면,
group By에서 다뤄야하는 데이터 크기가 작아져서 보다 효율적인 연산 가능

  1. 3개 이상 테이블 inner join시,
    크기가 가장 큰 테이블을 from절에 배치, inner join절에는 남은 테이블을 작은 순서대로 배치하는게 좋다.
profile
인정받는 개발자가 되고싶습니다.

0개의 댓글