효과적인 쿼리 저장
2021. 8. 25. 00:16ㆍDataBase
쿼리 최적화
쿼리(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사용률 높인다.
출처
'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 |