본문 바로가기

공부/TIL

24.01.23

쿼리 최적화의 방법

1. SELECT를 사용할 때 원하는 컬럼만 가져와야 함

그렇지 않으면 DB에서 처리해야할 연산이 늘어나기 때문. 또한 네트워크 트래픽도 올라감

2. 조건 부여시 DB값에 연을 달지 않는 것이 좋음

DB값에 연산을 걸면 DB는 모든 값을 SCAN하고, 연산을 해야함. 하지만 그렇지 않을 경우 모든 값을 SCAN할 필요가 없다.

3. LIKE의 %활용시 앞에보단 뒤에 사용하는것이 좋다

String 앞에 사용 시 db는 모든 데이터를 확인하고, 그 다음 데이터를 확인해야 한다.

하지만 뒤에 사용하면, 앞에 나온 값들 만 탐색하므로 db 연산이 적어진다.

4. SELECT DISTINCT문은 가급적 피해야 한다.

DISTINCT는 자체로 연산이 오래걸리기 때문에 피하는 것이 좋음. 이를 대체하기 위해 EXIST를 사용하면 좋다.

5. GROUB BY 연산시 HAVING 보다는 WHERE이 좋다.

WHERE절이 HAVING 절보다 먼저 실행이 된다. 따라서 WHERE로 그룹을 먼저 작게 만들고, 그 후 GROUP BY연산이 시작되므로 연산 량이 적어진다.

6. 3개 이상의 TABLE을 조인할 때는 가장큰 TABLE을 FROM에 넣고, INNER JOIN은 작은 순서대로 넣는다.

 

 

DB로직 최적화

1. 일관된 데이터 모델링

DB정규화를 통해  데이터 중복을 최소화

2. 비즈니스 로직 분리

DB에 로직을 넣는것을 피하고 되도록 서비스에 로직을 넣는

3. 조회 최적화

쿼리 최적화를 통해 복잡한 연산을 최소화 하기

4. 인덱스 활용

필요한 컬럼에 인덱스를 활용한다

5. 쿼리 캐싱

자주 사용되는 쿼리 결과를 캐싱해서 반복적인 쿼리 실행 막기

6. 트랜잭션 사용 최소화

트랜잭션은 데이터의 일관성과 무결성을 지키는데 필요하지만, 필요하지 않은 곳의 트랜잭션을 사용하는 것을 피해라.

7. 배치 처리

대량의 데이터 처리를 할 때는 배치 작업을 활용해 효율적으로 처리

8. 프로시저 및 함수 활용

DB 내부에서 로직을 처리하는 스토어드 프로시저나 함수를 사용하여 앱과 DB간의 통신을 최소화

9. 데이터 캐싱

자주 사용되는 데이터를 앱에서 캐시하여 DB 접근을 줄임

10. 적절한 인덱스와 제약 조건 활용

데이터 베이스 테이블 인덱스와 제약 조건을 적절하게 활용해 데이터 무결성을 보장

 

'공부 > TIL' 카테고리의 다른 글

24.01.26  (1) 2024.01.26
24.01.24  (0) 2024.01.24
24.01.22  (1) 2024.01.22
24.01.19  (0) 2024.01.19
24.01.18  (0) 2024.01.18