효과적인 쿼리 저장

2021. 8. 25. 00:16DataBase

쿼리 최적화

쿼리(SQL에서 주로 SELECT)를 빠르고 효율적으로 실행하기 위한 작업 

쿼리 최적화를 통해 데이터를 빠르게 받을 수 있다. 즉 성능을 높일 수 있다.  

 

 

1, 조건 컬럼에는 별도의 연산을 걸지 않는다.

WHERE PRICE + 100 < 200

WHERE PRICE < 100

- 인덱스가 걸린 컬럼을 변경하면 인덱스를 그대로 사용할 수 없다.

- 함수, 계산, 표현식은 인덱스 컬럼에 작성하지 말자

 

 

2, SELECT할 때는 필요한 연산만 기지고 온다.

SELECT * FROM student;

SELECT ID FROM student;

- 많은 필드를 불러올 수록, 디비는 더 많은 로드를 부담한다. 

- 딱 사용할 필드만 가지고 온다.  

 

 

3, WHERE절의 비교 컬럼 데이터 타입은 일치하는 것이 좋다.

 

 

4, SELECT DISTINCT, UNION DISTINCT와 같은 중복값을 제거하는 함수는 최소화 한다. 

- 중복값을 제거하는 연산은 시간이 오래 걸린다. 

- 해결 방법: 테이블의 크기를 최소화, EXISTS활용

 

 

 

5, LIKE사용 시, %를 STRING앞에 배치하지 않는다.

WHERE c.value LIKE "%Programming"

WHERE c.value LIKE "Web%" OR c.value LIKE "MobileProg%"

Web Programming과 Mobile Programming을 추출하고 싶은 경우 

- %는 FULL SCAN을 사용하며 인덱스를 타지 않는다.

- 1번과 유사하다. 

 

 

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

- 항상 통용되는 것은 아니다. 

- inner조인은 대부분 Query Planner에서 가장 효과적인 순서를 탐색해 inner join순서를 변경

   -> 실행 시간 차이 거의 없다.

 

 

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

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

- 건수가 작음 효과적. 건수가 많으면 성능 저하와 CPU사용률 높인다.

 

 

 

 


출처

https://yulsfamily.tistory.com/233

https://medium.com/watcha/%EC%BF%BC%EB%A6%AC-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%AB%EA%B1%B8%EC%9D%8C-%EB%B3%B4%EB%8B%A4-%EB%B9%A0%EB%A5%B8-%EC%BF%BC%EB%A6%AC%EB%A5%BC-%EC%9C%84%ED%95%9C-7%EA%B0%80%EC%A7%80-%EC%B2%B4%ED%81%AC-%EB%A6%AC%EC%8A%A4%ED%8A%B8-bafec9d2c073

'DataBase' 카테고리의 다른 글

SQL(Structured Query Language)_DML  (0) 2021.11.07
Replication(리플리케이션)  (0) 2021.08.25
Optimizer(최적화의 원리)  (0) 2021.08.24
Transaction(트랜잭션)  (0) 2021.08.17
정규화(Normalization) - 1차 2차 3차 BCNF  (2) 2021.08.16