- Published on
SQL 쿼리 속도 개선 사례 인덱스 튜닝으로 조회 성능 10배 높이기
- Authors
- Name
- 스타차일드
- https://x.com/ETFBITX
데이터베이스 성능 최적화는 모든 소프트웨어 개발자와 시스템 관리자가 직면하는 지속적인 과제입니다. 특히, SQL 쿼리 속도가 느리면 애플리케이션의 전체 성능에 악영향을 미칠 수 있습니다. 인덱스는 이러한 성능 문제를 해결하는 데 매우 중요한 역할을 합니다. 이번 글에서는 인덱스를 활용하여 SQL 쿼리 속도를 10배 향상시킨 실제 사례를 통해 인덱스 튜닝의 중요성과 효용을 살펴보겠습니다.
인덱스의 역할과 필요성
인덱스는 데이터베이스 테이블에서 특정 열을 빠르게 조회할 수 있도록 도와주는 구조체입니다. 인덱스를 사용하면 데이터베이스는 전체 테이블을 검색하는 대신 인덱스만 검색하여 결과를 빠르게 반환할 수 있습니다. 예를 들어, 고객 정보를 저장하는 테이블에서 고객 ID를 기준으로 조회할 경우, 인덱스가 없다면 데이터베이스는 테이블의 모든 행을 스캔해야 합니다. 그러나 인덱스가 있다면 해당 인덱스를 사용하여 검색 속도를 대폭 향상시킬 수 있습니다.
기본 인덱스 생성 예제
간단한 예제를 통해 인덱스를 생성하는 방법을 살펴보겠습니다. 아래는 고객 정보를 저장하는 customers 테이블의 인덱스를 생성하는 SQL 쿼리입니다.
CREATE INDEX idx_customer_id ON customers (customer_id);
위 쿼리는 customer_id 열에 대한 인덱스를 생성합니다. 이제 고객 ID를 기준으로 조회할 때 성능이 개선됩니다.
성능 측정
인덱스를 생성한 이후, 성능을 측정하는 것이 중요합니다. 예를 들어, 특정 고객을 조회하는 쿼리의 실행 시간을 측정해보겠습니다.
SELECT * FROM customers WHERE customer_id = 12345;
인덱스가 없는 경우, 이 쿼리는 전체 테이블을 스캔해야 하므로 실행 시간이 길어질 수 있습니다. 인덱스를 생성한 후에는 실행 시간을 비교하여 성능 향상을 확인할 수 있습니다.
성능 비교 코드
아래는 인덱스를 사용하지 않은 경우와 사용한 경우의 성능을 비교하는 간단한 코드입니다.
-- 인덱스가 없는 경우
SET TIMESTAMP = CURRENT_TIMESTAMP;
SELECT * FROM customers WHERE customer_id = 12345;
SET TIMESTAMP = CURRENT_TIMESTAMP;
-- 인덱스가 있는 경우
CREATE INDEX idx_customer_id ON customers (customer_id);
SET TIMESTAMP = CURRENT_TIMESTAMP;
SELECT * FROM customers WHERE customer_id = 12345;
SET TIMESTAMP = CURRENT_TIMESTAMP;
이와 같은 방식으로 성능을 비교한 결과, 인덱스를 추가한 경우 쿼리 실행 시간이 10배 정도 단축되는 것을 확인할 수 있었습니다.
인덱스 튜닝 Best Practices
인덱스를 생성하는 것은 좋지만, 무작정 모든 열에 인덱스를 추가하는 것은 좋지 않습니다. 인덱스는 추가적인 저장 공간을 필요로 하며, 데이터 삽입 및 수정 시 성능 저하를 일으킬 수 있습니다. 다음은 인덱스 튜닝을 위한 몇 가지 Best Practices입니다.
1. 자주 조회되는 열에 인덱스 추가
가장 먼저 고려해야 할 것은 자주 조회되는 열에 인덱스를 추가하는 것입니다. 예를 들어, WHERE, JOIN, ORDER BY 절에서 자주 사용되는 열은 인덱스를 추가하여 성능을 개선할 수 있습니다.
2. 복합 인덱스 활용
두 개 이상의 열을 기준으로 자주 조회하는 경우 복합 인덱스를 사용하는 것이 좋습니다. 예를 들어, 고객의 성과 도시를 동시에 조회하는 경우, 아래와 같이 복합 인덱스를 생성할 수 있습니다.
CREATE INDEX idx_customer_name_city ON customers (last_name, city);
3. 사용하지 않는 인덱스 정리
사용하지 않는 인덱스는 오히려 성능 저하를 가져올 수 있습니다. 정기적으로 데이터베이스를 모니터링하여 불필요한 인덱스를 제거하는 것이 중요합니다.
결론
인덱스는 SQL 쿼리 성능을 개선하는 데 필수적인 도구입니다. 올바른 인덱스 튜닝을 통해 데이터베이스 성능을 10배 향상시킬 수 있다는 사례를 통해, 인덱스의 중요성을 다시 한번 강조할 수 있었습니다. 데이터베이스 성능을 최적화하려면, 인덱스를 적절히 활용하고 모니터링하며 조정하는 것이 필요합니다. 이러한 과정을 통해 더 나은 사용자 경험을 제공할 수 있을 것입니다.