•
유민아
검색시 필요한 컬럼만 검색하면 리소스를 절약하는 것을 물론, 불필요한 작업을 수행하지 않아도 되어 검색과 처리 시간이 단축되기 때문에 네트워크 부하를 감소시킬 수 있습니다. 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 성능을 향상시키고 시스템이 효과적으로 운영하여 애플리케이션의 성능 및 사용자 경험을 크게 향상시킬 수 있습니다.