질의 최적화 (query optimization)

컴퓨터과학·AI
한 줄 정의: 같은 결과를 내는 여러 실행 방법 중 비용이 가장 낮은 실행 계획을 골라내는 과정입니다.

쉽게 풀면

SQL은 무엇을 원하는지만 적고 어떻게 가져올지는 적지 않습니다. 같은 질의라도 어떤 표를 먼저 읽고 어떤 순서로 조인하느냐에 따라 걸리는 시간이 수천 배 차이 날 수 있습니다. 질의 최적화기는 가능한 실행 방법들을 후보로 만들고 통계에 근거해 비용을 어림한 뒤 가장 싼 것을 고릅니다.

왜 중요한가

데이터베이스가 선언적 언어의 편리함을 제공하면서도 성능을 낼 수 있는 이유가 바로 이 단계에 있습니다. 개발자가 내부 구조를 몰라도 되게 해 주는 대신, 최적화기의 판단이 어긋나면 성능 문제가 발생하므로 실행 계획을 읽는 능력이 실무의 핵심 역량이 됩니다. 데이터베이스 시스템 연구에서 가장 오래되고 비중 있는 주제 중 하나입니다.

논문에서는 이렇게 쓰입니다

"통계 정보를 갱신한 뒤 최적화기가 중첩 루프 조인 대신 해시 조인을 선택하면서 질의 응답 시간이 40초에서 1.2초로 단축되었다."

데이터 분포 정보를 최신화하자 더 알맞은 실행 방법이 선택되었다는 사례입니다.

조금 더 깊게 보면

먼저 관계대수 수준에서 선택과 사영을 아래로 내리는 등 규칙 기반 변환을 적용하고, 이어 조인 순서와 접근 방법, 조인 알고리즘의 조합을 후보로 열거해 비용을 비교하는 비용 기반 최적화를 수행합니다. 비용 추정의 핵심은 각 연산이 만들어 낼 행 수를 예측하는 카디널리티 추정이며, 히스토그램과 서로 다른 값의 개수 같은 통계에 의존합니다. 조인 순서 탐색은 경우의 수가 폭발하므로 동적계획법이나 유전 알고리즘류의 탐색을 쓰고, 실행 중 통계를 반영해 계획을 고치는 적응적 최적화도 쓰입니다.

주의할 점

데이터베이스 인덱스는 최적화기가 선택할 수 있는 접근 경로를 제공하는 물리적 구조이고, 질의 최적화는 그런 선택지들 중에서 계획을 고르는 의사결정 과정이라는 점이 다릅니다. 통계가 오래되거나 열 사이 상관을 무시하면 추정이 크게 빗나가 나쁜 계획이 선택됩니다.

관련 용어