Search
Duplicate

25.쿼리 최적화에 대해 설명해주시고 방법에 대해 설명해주세요.

Created
2024/01/23 00:32
Tags
유민아
검색시 필요한 컬럼만 검색하면 리소스를 절약하는 것을 물론, 불필요한 작업을 수행하지 않아도 되어 검색과 처리 시간이 단축되기 때문에 네트워크 부하를 감소시킬 수 있습니다. LIMIT을 이용해 반환되는 행의 수를 제한하면 서버가 불필요한 작업을 수행하지 않아도 되기 때문에 실행시간을 단축시켜 쿼리 성능을 향상시킬 수 있습니다. 그 외에도 자원 절약을 할 수 있는 DISTINCT 문, 검색 정확성을 향상시키기 위해 와일드 카드를 문장의 끝에서만 사용하는 등의 방법도 있습니다.
김민선
쿼리 최적화는 데이터베이스에서 쿼리의 실행 계획을 향상시켜 성능을 최적화하는 프로세스를 말합니다. 잘 최적화된 쿼리는 빠른 응답 시간과 효율적인 자원 사용을 보장할 수 있습니다. 아래는 쿼리 최적화를 위한 주요 방법과 기술에 대한 간략한 설명입니다:
1.
인덱스 활용:
필요한 컬럼에 적절한 인덱스를 생성하여 검색 속도를 향상시킵니다. WHERE 조건, JOIN, ORDER BY 등에서 자주 사용되는 컬럼에 인덱스를 생성하는 것이 좋습니다.
2.
정규화 및 데-normalization:
데이터베이스 설계에서 적절한 정규화를 통해 중복을 최소화하면서도 쿼리의 복잡성을 줄일 수 있습니다. 데-normalization은 읽기 성능을 높일 수 있습니다.
3.
쿼리 작성의 주의:
불필요한 컬럼이나 데이터를 가져오지 않도록 쿼리를 최소화합니다. '*' 대신 필요한 컬럼만 명시적으로 선택하는 것이 좋습니다.
4.
인덱스 결합:
여러 개의 인덱스를 사용해야 할 때, 인덱스를 결합하여 사용하면 성능을 향상시킬 수 있습니다.
5.
쿼리 최적화 힌트 사용:
데이터베이스 제공자가 제공하는 쿼리 최적화 힌트를 사용하여 쿼리 실행 계획을 직접 제어할 수 있습니다.
6.
쿼리 캐싱 활용:
자주 사용되는 쿼리 결과를 캐시하여 중복 실행을 방지하고, 빠른 응답 속도를 유지합니다.
7.
분석 도구 활용:
데이터베이스 성능을 분석하는 도구를 사용하여 쿼리 실행 계획을 검토하고 병목 현상을 찾아 최적화합니다.
8.
알맞은 JOIN 사용:
INNER JOIN, LEFT JOIN, RIGHT JOIN 등을 적절하게 사용하여 필요한 데이터만을 가져오도록 합니다.
9.
데이터베이스 통계 갱신:
데이터베이스는 쿼리 실행 계획을 수립할 때 통계 정보를 활용합니다. 주기적으로 통계 정보를 갱신하여 최적의 실행 계획을 선택할 수 있도록 합니다.
10.
적절한 페이징 기법 사용:
대량의 데이터를 페이징 처리할 때 OFFSET, LIMIT 등을 효과적으로 활용하여 데이터를 효율적으로 가져옵니다.
쿼리 최적화는 데이터베이스 성능 향상을 위한 지속적인 과정으로, 데이터베이스의 구조와 쿼리 패턴을 이해하고 효율적으로 조치하는 것이 중요합니다.
박준영
데이터베이스 시스템에서 쿼리(데이터베이스에서 정보를 검색, 조작하거나 분석하는 명령어)를 가장 효율적으로 실행하기 위해 실행 계획을 최적화하는 프로세스.

쿼리 평가 계획 작성

데이터베이스 시스템은 쿼리를 평가하기 위한 여러 실행 계획을 생성합니다. 각 계획은 쿼리를 실행하는 다른 방법을 나타낸다.

비용 기반 최적화

각 실행 계획에 대한 예상 비용을 계산하고, 가장 저렴한 계획을 선택한다. 비용은 실행 시간, CPU 사용량, 입출력 등과 관련된 여러 요소를 고려한다.

인덱스 사용

적절한 인덱스를 활용하여 데이터 접근을 최적화한다. 인덱스는 특정 열에 대한 빠른 검색을 지원하므로, 쿼리의 WHERE 절 조건에 인덱스를 활용할 수 있는지 고려한다.

조인 최적화

조인 연산을 최적화하여 불필요한 조인을 피하고, 조인 순서를 조정하여 성능을 향상시킨다.

부분 결과 최적화

중간 결과 집합을 최소화하기 위해 집계 함수나 필터링을 조건절 앞으로 이동하거나 조건을 최적화한다.

쿼리 캐싱

이전에 실행한 쿼리의 결과를 캐시하여 동일한 쿼리를 다시 실행하지 않고 캐시된 결과를 반환하는 방법을 사용한다.

통계 정보 사용

데이터베이스의 통계 정보를 활용하여 쿼리 최적화 결정에 도움을 준다. 이를 통해 올바른 인덱스 선택과 조인 순서 등이 결정된다.

하드웨어 및 시스템 리소스 고려

시스템의 하드웨어 및 리소스 제약 사항을 고려하여 최적화를 수행한다.

동적 최적화

실행 중인 쿼리의 성능을 실시간으로 모니터링하고, 최적화 결정을 동적으로 조정한다.
김한신
일반적으로 데이터베이스 시스템은 사용자가 쿼리를 실행할 때마다 데이터를 검색하고 반환하게 됩니다. 이 때 부적절한 인덱스를 사용하거나, 네트워크 지연, 자원 부족 등의 문제가 발생할 시 응답 시간이 늘어나고, 시스템 성능이 저하되며, 많은 부하를 발생 시켜 DB 시스템에 대한 잠재적 보안 취약성을 야기 할 수 있습니다.
때문에 이를 방지하기 위해 다음과 같이 DB 쿼리의 성능을 향상시키는 과정이 필요합니다.
1.
인덱싱 사용: 사용하는 쿼리에 관련된 열들을 적절히 인덱싱 함으로 데이터 검색 속도를 크게 향상시킬 수 있습니다.
2.
하이버네이트 캐싱: Spring Boot에서 ORM으로 하이버네이트를 사용하는 경우, 캐싱 메커니즘을 활용함으로써 데이터베이스 쿼리 수를 줄일 수 있습니다.
3.
일괄 처리: 대량 작업에 대해 일괄로 처리하도록 해 개별 데이터베이스 상호 작용 수를 최소화하고 전체적인 성능을 향상시킬 수 있습니다.
4.
JPA 쿼리 최적화: JPA를 사용하는 경우, 게으른 로딩 및 페치 전략과 같은 기능을 사용하해, 필요한 데이터만 검색함으로써 성능을 향상시킬 수 있습니다.
5.
데이터베이스 연결 풀링: 애플리케이션이 효율적인 데이터베이스 연결 풀을 설정함으로 데이터베이스 연결을 효과적으로 관리하고 재사용해, 각 쿼리에 대한 새로운 연결 생성의 부담을 줄일 수 있어요.
이들 중 특정 애플리케이션의 요구 사항과 특성을 분석하여 가장 적합한 최적화 기술을 선택해 사용하면, DB 성능을 향상시키고 시스템이 효과적으로 운영하여 애플리케이션의 성능 및 사용자 경험을 크게 향상시킬 수 있습니다.