59.1. 복잡한 쿼리 최적화 문제 관점에서 본 쿼리 처리

모든 관계 연산 가운데, 제일 어려운 부분은 조인에 관계된 처리와 그 최적화 부분이다. 쿼리의 실행 계획 종류는 그 쿼리에서 사용하는 조인 수와 비례해서 기하급수적으로 많아진다. 보다 좋은 최적화 기능은 각 객체들에 대한 조인 연산을 할 경우, 다양한 조인 방법 (예, PostgreSQL에서는 중첩 순환 nested loop, 해쉬 조인 hash join, 머지 조인 merge join을 지원함)을 고려하는 것이고, 여러가지 인덱스 (예, PostgreSQL에서는 B-트리, 해시, Gist, GIN 인덱스를 지원함)를 해당 객체에서 잘 사용하는 것이다.

단순한 쿼리인 경우 PostgreSQL 쿼리 최적화기는 최선의 실행 계획을 찾기 위해 거의 모든 경우의 수를 찾는다. 이 알고리즘은 IBM 시스템 R 데이터베이스에서 처음 소개되었으며, 쿼리에서 많은 조인이 사용될 경우, 사용할 실행 계획을 결정하기 위해서는 많은 시간과 메모리를 필요로 한다. 이 알고리즘으로는 테이블들간의 많은 조인을 하는 쿼리인 경우 PostgreSQL 쿼리 최적화기에서 사용하기는 부적절했다.

독일 프라이베르크 광업 기술 대학 자동 제어 연구소에서 전력 그리드 관리용 지식 기반 시스템의 데이터베이스로 PostgreSQL을 사용하려고 했는데, 몇가지 문제가 있었다. 지식 기반 시스템의 추론을 위한 복잡한 쿼리를 DBMS가 처리해 내야 했다. 이런 쿼리들은 기존 쿼리 최적화기로는 좋은 성능을 낼 수 없었다.

이런 문제를 해결하기 위하여 유전자 알고리즘 기반 쿼리 최적화기가 도입되었으며, 복잡한 조인 쿼리를 보다 효율적으로 최적화된 실행 계획을 짜는데 사용했다. 다음 절에서 이것에 대한 구현 방법을 자세히 소개한다.