[데이터베이스] 효과적인 쿼리 저장

Narcoker·2023년 7월 10일
0

데이터베이스

목록 보기
6/17
post-custom-banner

쿼리 최적화

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

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

즉, 성능을 높일 수 있다.

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

WHERE PRICE + 100 < 200

WHERE PRICE < 100

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

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

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

SELECT * FROM student;

SELECT ID FROM student;

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

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

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

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

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

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

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

WHERE c.value LIKE "%Programming"

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

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

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

조건 컬럼에는 별도의 연산을 걸지 않는다. 과 유사하다.

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

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

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

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

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

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

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

참고

추가해서 보면 좋을 자료

profile
열정, 끈기, 집념의 Frontend Developer
post-custom-banner

0개의 댓글