第 47章遺伝的問い合わせ最適化

目次
47.1. 複雑な最適化問題としての問い合わせ処理
47.2. 遺伝的アルゴリズム
47.3. PostgreSQLの遺伝的問い合わせ最適化(GEQO
47.4. さらに深く知るには

著者: このドキュメントはMartin Utesch()によって、ドイツ、フライブルグにあるUniversity of Mining and TechnologyのInstitute of Automatic Controlのために書かれました。

47.1. 複雑な最適化問題としての問い合わせ処理

リレーショナル演算子の中で、処理と最適化が一番難しいのは結合です。 ある問い合わせに答えるための計画の侯補は、その問い合わせに含まれる結合の数によって指数的に増えます。個々の結合や、多様なインデックス(例えばPostgreSQLのR-tree、B-tree、ハッシュなど)をリレーションのアクセスパスとして処理するため、様々な結合メソッド(例えばPostgreSQLの入れ子ループ、ハッシュ結合、マージ結合など)を提供することが、さらなる最適化を行わなければならない腐心の原因となっています。

現在のPostgreSQLオプティマイザの実装は、侯補ストラテジ空間にわたってしらみつぶしに近い検索を行います。 "System R"データベースで初めて導入された、このアルゴリズムはほぼ最適な結合順を生成しますが、問い合わせ内の結合数が増えると膨大な処理時間とメモリ空間を必要とします。 このため、通常のPostgreSQL問い合わせオプティマイザは結合するテーブル数の多い問い合わせには向いていません。

ドイツ、フライブルグにあるUniversity of Mining and TechnologyのInstitute of Automatic Controlでは、送電網の保守のための意志決定知識ベースシステムのためのバックエンドとしてPostgreSQL DBMSを使おうとしたため問題が起こりました。 そのDBMSは知識ベースシステムの推論マシンのために、大きな結合の問い合わせを処理する必要があったのです。

可能な問い合わせ計画の検索性能に問題があったため、新しい最適化技術の開発が必要とされるようになりました。

以下では、多数の結合を持つ問い合わせを効率的に行うことができるように、結合順問題を解決する遺伝的アルゴリズムの実装を説明します。