[SQL] 계산량 줄이는 꿀팁

도리·2025년 2월 23일

where 절 계산량 최적화

  • where salary*1.1 > 50000 보다
  • where salary > 50000/1.1 이 낫다

join 최적화 (필터링 후 조인)

SELECT D.ID, D.NAME, S.SALARY
FROM EMPLOYEES D
JOIN SALARIES S ON D.ID = S.EMPLOYEE_ID
WHERE S.SALARY > 50000;

이것보단

SELECT D.ID, D.NAME, S.SALARY
FROM (SELECT * FROM SALARIES WHERE SALARY > 50000) S
JOIN EMPLOYEES D ON D.ID = S.EMPLOYEE_ID;

이 코드가 낫다.
조건부 Salaries 테이블을 S로 둔 다음 D 테이블 쪼인.

Where 절 인덱스 사용

1) 함수 사용
SELECT FROM USERS WHERE LOWER(NAME) = 'john doe'; -- 인덱스 사용 X
이 코드보단
SELECT
FROM USERS WHERE NAME = 'John Doe'; -- 인덱스 사용 O
이 코드가 낫다

2) like 사용 - %가 앞에 있으면 인덱스 사용 불가하다!
SELECT FROM CUSTOMERS WHERE EMAIL LIKE '%gmail.com'; -- 인덱스 사용 X
이 코드 보단
SELECT
FROM CUSTOMERS WHERE EMAIL LIKE 'john%'; -- 인덱스 사용 O
이 코드가 낫다.

서브쿼리 vs join

Join 으로 변환해버리고, 조건 거는게 보통 낫다.

  • select 절에 서브쿼리를 넣게되면 매 행마다 서브쿼리절이 반복되기 때문이다.
  • join 절에 서브쿼리를 넣으면 더 효율적으로 사용 가능함.

다중조건 체크 (or 조건이 많으면 인덱스 사용이 불리하다고 함.)

SELECT FROM DEVELOPERS WHERE SKILL = 'Python' OR SKILL = 'C#'; 보단
SELECT
FROM DEVELOPERS WHERE SKILL_CODE & (SELECT BIT_OR(CODE) FROM SKILLCODES WHERE NAME IN ('Python', 'C#'));

union vs union all

  • union 정렬이 필요 (중복값 제거하고 반환해서)
  • union 정렬 필요 x

Union, union all은 두개 이상의 select 쿼리 결과를 결합할 때 사용한다.
( 다른 테이블에서 비슷한 형태의 데이터 합칠 때 사용)

profile
인공지능응용학과 졸업예정..

0개의 댓글