SQL을 개발할 때 중요한 것은 "빠른 데이터 검색"과 "쿼리 성능(리소스) 최적화"입니다.
여기서 쿼리 처리에 사용되는 두 가지 일반적인 방법이 있죠. 바로 LOOP-QUERY와 ONE-SQL 처리 방식입니다. 보통은 LOOP 쿼리는 지양하고 ONE-SQL을 권장하는 내용이 많죠. 왜 그럴까요? 그 이유를 알고 사용하는 것이 중요합니다.
때로는 LOOP 쿼리가 필요한 경우도 있습니다. ONE-SQL이 적합하지 않는 경우도 있고요. 그래서 각각 고유한 장점과 제한 사항을 알아 둘 필요가 있습니다. 이 글에서는 SQL 쿼리를 최적화할 때 도움이 되도록 두 가지 방법의 특징과 장단점을 자세히 살펴보겠습니다.
LOOP-QUERY 처리 방법
LOOP-QUERY 방법은 쉽게 말해 데이터를 가져올 때 LOOP를 통해 한 건씩 SQL로 처리하는 방식을 말합니다. 데이터 레코드 또는 행(rows)을 반복적으로 처리한다는 이야기죠. 이 처리 방식을 뜯어보면, SQL이 일반적으로 커서나 중첩 루프와 같은 반복 구문을 사용하는데요. 한 번에 하나씩 행을 반복하고 필요에 따라 계산도 반복적으로 수행합니다. SELECT했을 경우 어떻게 데이터베이스가 작동하는지 원리는 링크를 참고하시면 좋겠습니다. 아래 그림은 간단하게 표현했습니다.
1. 장점
1) 개별 작업 및 제어
- LOOP-QUERY를 사용하면 개별 행에서 수행할 수 있으므로 세부적인 데이터 조작이 필요한 시나리오에 적합합니다. SQL을 개발할 때 세밀하게 제어할 수 있으므로 맞춤형 비즈니스 규칙을 구현하거나 처리할 수 있습니다.
2) 소규모 데이터에서 빠른 일부 검색
- LOOP-QUERY는 반복 특성으로 인해 대규모 데이터 세트에 효율적인 방법이 아닐 수 있지만 성능이 주요 관심사가 아닌 소규모 데이터의 시나리오에서는 여전히 적절하게 수행될 수 있습니다. 루프로 가져온 데이터는 바로 검색도 가능합니다.
2. 단점
1) 성능 오버헤드
- LOOP-QUERY는 특히 데이터량이 많을 때 성능 오버헤드가 발생합니다. 예를 들어, 100만건의 데이터를 처리하려면 100만 번의 LOOP 쿼리를 수행하는다는 말입니다. 단지 쿼리 반복 수행만이 아니라, 네트워크 단에서도 반복적으로 데이터를 전송하게 됩니다. 이런 반복적 특성으로 인해 처리 시간과 리소스 사용이 증가하여 쿼리 실행 속도가 느려질 수 있습니다.
2) 병목 현상 가능성
- LOOP-QUERY에 사용되는 일반적인 루프 구성인 커서는 리소스를 많이 잡아먹는 SQL이 될 수 있습니다. 특히 여러 쿼리가 동작하는 동시성이 높은 환경에서 성능 병목 현상을 일으킬 수 있습니다.
ONE-SQL 처리 방법
이와 대조적으로 ONE-SQL 방법은 LOOP를 통해 한건씩 처리하는게 아니라, LOOP 없이 하나의 SQL을 집합적 처리하는 방식입니다. 단일 SQL 쿼리를 작성하여 필요한 모든 데이터 처리 및 계산을 단일 패스로 수행합니다. 이 접근 방식은 SQL의 집합 기반 작업 기능을 활용하여 쿼리 성능을 최적화하고 처리 오버헤드를 최소화하는 목적이 있습니다.
1. 장점
1) 성능 효율성
- ONE-SQL 쿼리는 집합 기반 작업에 최적화되어 있어 반복적인 LOOP-QUERY 방법에 비해 데이터를 더 효율적으로 처리할 수 있습니다. SQL에 내장된 집계 기능, 조인 및 필터링 기능을 활용하여 처리 시간과 리소스 활용도를 최소화합니다.
2) 단순성 및 가독성
- ONE-SQL 쿼리 작성은 복잡한 LOOP 쿼리보다 더 간단하고 직관적인 경우가 많습니다. 개발자는 SQL의 표현적 구문을 사용하여 간결하고 선언적인 방식으로 데이터 처리 요구 사항을 표현해 오류 위험을 줄이고 코드 가독성을 높일 수 있습니다.
3) 확장성
- ONE-SQL 쿼리는 효율적인 처리 알고리즘과 최적화된 실행 계획 덕분에 대규모 데이터 세트와 높은 동시성 워크로드를 처리하는 데 매우 적합합니다. 성능 저하 없이 증가하는 데이터 볼륨을 수용하도록 효과적으로 확장할 수 있습니다.
2. 단점
1) 최적화 과제
- 효율적인 ONE-SQL 쿼리를 작성하려면 SQL 최적화 기술과 데이터베이스 내부 메커니즘에 대한 깊은 이해가 필요합니다. 개발자는 인덱스를 활용하고, 불필요한 조인이나 하위 쿼리를 피하고, 실행 계획을 최적화하여 최적의 성능을 달성하도록 쿼리를 신중하게 작성해야 합니다.
2) 디버깅 복잡성
- 복잡한 ONE-SQL 쿼리를 디버깅하는 것은 어려울 수 있는데요. 특히 중첩된 하위 쿼리나 복잡한 조인 조건을 처리할 때 더욱 그렇습니다. 성능 병목 현상을 식별하고 해결하려면 고급 SQL 튜닝 및 최적화 기술이 필요할 수 있습니다.
위에서 살펴 본것처럼 LOOP-QUERY와 ONE-SQL 은 각각의 장단점이 있습니다. 결론적으로 특수한 경우를 제외하고는 ONE-SQL이 유리함을 알 수 있습니다. 다만, 고급 SQL 레벨이 되어야 ONE-SQL을 적합하게 구현할 수 있다는 점입니다.
또 애플리케이션의 특정 요구 사항, 데이터 처리 논리의 복잡성 및 성능 목표에 따라 달라지기도 합니다. SQL의 집합 처리 개념에 익숙해진다면 충분히 ONE-SQL로 작성할 수 있습니다. 프로그램처럼 거의 댜부분의 로직 처리를 SQL로 작성할 수 있습니다.
'데이터베이스' 카테고리의 다른 글
SQL 파싱 과정: 하드파싱(hard parsing) vs 소프트파싱(soft parsing) (0) | 2024.04.11 |
---|---|
SQL 다중처리(Array Processing) 원리 (0) | 2024.03.21 |
인메모리(in-memory) db 유형에 따른 종류 (2) | 2024.03.15 |
데이터 마트(Data Mart) 설계 - 다차원 모델링, OLAP (2) | 2023.12.15 |
데이터 마트(Data Mart) 특징 및 ETL (0) | 2023.12.14 |