데이터베이스 쿼리 튜닝 기법

eomprgrm·2023년 4월 16일
0

1. 개요


좋은 성능의 데이터베이스 쿼리를 작성하는 것은 개발자 또는 DBA의 공통적인 목표일 것이다. SQL 서버, 오라클, MySQL 등 관계형 데이터베이스를 이용하여 프로그래밍 시 최적화된 성능을 위한 쿼리 튜닝 기법에 대해 작성할 것이다.

2. 쿼리 튜닝 기법


1) 인덱스를 사용하라

인덱스로 생성한 컬럼을 사용하여 쿼리 실행 속도를 빠르게 가져갈 수 있다. 인덱스를 사용하면 데이터베이스는 인덱스에 저장된 키 값으로 데이터를 정렬하고, 검색할 때는 이 키 값을 이용해 데이터를 빠르게 찾아낸다.

2) SELECT *을 사용하지 마라

모든 데이터를 조회하는 경우가 아니라면 SELECT 을 사용하지 않는다. 특정 데이터 조회를 필요로 하지만 을 사용하면 모든 데이터를 조회하므로 성능이 떨어진다.

3) 인덱스 컬럼의 LIKE 검색 시 주의할 점

인덱스로 생성된 컬럼을 통해 검색할 경우 LIKE를 사용한다면 % 사용에 주의하여야 한다. 인덱스 컬럼의 시작지점에 %가 붙은 경우 인덱스를 사용하지 않는다. 가급적 %는 끝에 붙이도록 한다.

4) SELECT 문에서 HAVING 절을 사용하지 않는 것이 좋다.

HAVING 절은 GROUP BY 절과 함께 사용되며, GROUP BY 절에서 그룹화된 결과 집합에 대한 조건을 지정할 때 사용된다. 그러나 HAVING 절을 사용하면 데이터베이스는 결과를 생성한 후 그룹화하고 조건을 적용하게 된다. 이는 처리 시간과 리소스를 많이 소모한다. 따라서 HAVING 절을 사용하지 않고 WHERE 절을 사용하여 가능한 한 많은 조건을 필터링하고 결과 집합을 줄이는 것이 좋다.

5) DISTINCT는 가급적 사용하지 않는 것이 좋다.

SELECT 문에서 DISTINCT 키워드는 중복되는 결과를 제거하는 데 사용됩니다. 그러나 DISTINCT를 사용하면 데이터베이스는 내부적으로 데이터를 정렬하는 작업을 수반하기 때문에 처리 비용이 크다. 꼭 필요한 경우가 아니라면 사용하지 않을 것이 좋다.

6) IN 대신 EXISTS 사용하기

WHERE 조건에서 서브쿼리의 값을 확인할 경우 IN 또는 EXISTS를 사용할 수 있다. IN은 서브쿼리의 결과 집합에 대해 일치하는 값을 찾기 때문에 서브쿼리의 결과 집합의 크기가 클수록 처리 시간이 길어진다. 반면 EXISTS는 서브쿼리의 결과가 존재하는지만 확인하므로 처리 시간이 짧다.

7) JOIN에서 OR 조건은 성능 문제를 일으킬 수 있다.

OR 조건을 상요하면 인덱스를 활용할 수 없기 때문에 내부적으로 Full Scan을 하기 때문에 쿼리의 처리 속도가 최소 2배 이상 느려지며 성능이 떨어진다.

profile
성실하고 둥글게 살고자 하는 개발자입니다.

0개의 댓글