본문 바로가기
DB

[SQL / Query] 쿼리 최적화와 튜닝방법론

by SIXXXX_ 2022. 4. 4.
728x90

난생처음 코딩테스트를 봤다. 너무 어려웠는데 DB는 쉽다해서;

내실력이 아직 꼬꼬마인걸 다시 체감하고 공부하기로~

어떤 글을 읽다가 쿼리 최적화에 대해 보았다.

바로 구글링. 쿼리 최적화를 위한 SQL 작성팁 

일단 적어두고 적용법 생각해보기

 

 

1. 조건 컬럼에 별도의 연산을 걸지 말기

 

인덱스가 걸려있는 컬럼을 변형하면 인덱스를 타지 못한다.

함수, 계산, 표현식이 있다면 인덱스 컬럼이 아닌 반대쪽에 작성하기

 

2. SELECT 할때는 필요 컬럼만 가져오기 >>>  로드가 길어지지 않기 위해

 

3. WHERE 절의 비교컬럼 데이터 타입은 일치시키기

 

4. DISTINCT, UNION과 같은 중복 값을 제거하는 함수를 최소화시키기

 

5. LIKE 사용시 % 를 STRING 되도록 앞에 배치하지 말기

 >>> LIKE % ...... 의 표현식을 쓰지말기

 

FULL SCAN을 사용하게 되고 인덱스를 타지 않는다.

LIKE ...... % 또는 다른 방법 사용하기

위의 방법은 모든 문자열을 탐색하지 않기 때문에 성능이 좋다.

 

6. 3개 이상의 테이블을 조인할때는 크기가 가장 작은 테이블 먼저 배치

모든 경우에 적용되는건 아니고 PLAN을 통해 가장 효율적인 순서를 찾아 선택하기

 

7. 조인되는 건수가 작다면 일반적 조인보다는 스칼라서브쿼리 사용도 고려하기

스칼라 서브 쿼리는 함수와 같이 레코드당 하나의 값을 리턴하는 것.

* 스칼라 서브 쿼리 : SELECT 문에 있는 서브쿼리

* FROM절에 있는 서브쿼리 : 인라인뷰

* WHERE절에 있는 서브쿼리 : 서브쿼리

 

8. 그외

- 인덱스 컬럼을 WHERE 절에서 사용시에 OR 대신 UNION ALL을 사용

(*SELECT문 결과 합치는 방법 ㅣ UNION, UNION ALL 이 있는데

UNION ALL을 사용하면 중복을 제거하지 않고 합쳐진 결과 그대로 반환)

- 공통 쿼리는 WITH문을 사용해 통합해 사용한다

- 인덱스 힌트를 이용한다.

 

9.  LIKE보다 =가 연산속도가 빠르다.

 

10. 불필요 함수 호출 자제하기

 

11. 외래키 기능은 사용하지 말기

- 매번 키 무결성 체크를 하므로 부하가 꽤 크게 걸린다.

- 버그 양산에도 좋다.

- 다소 이론적이고 이상적인 기능

 

12. 서브 쿼리보다 조인통해 해결

 

SQL JOIN

 

REFERENCE

'DB' 카테고리의 다른 글

[SQL/ORACLE] DDL, DCL, DML  (0) 2021.07.17