• 追加された行はこの色です。
  • 削除された行はこの色です。
  • プランナ へ行く。

*目次 [#xfa47276]

#contents


*プランナ [#la5c5ce8]

-=[[オプティマイザ]]
-プランナの役割は、構文解析したSQLをこの順序でさらに解釈して、コンピュータの実行手順を作ることである。
-プランナでは色々な情報を用いながら、大雑把に最適なプランを選ぶしかない。なぜならば、DBシステムの用途によってどのプランが効率がよいかどうかが変わってくるからである。
--[[データウェアハウス]]のように、大量のデータを毎回違うSQLで検索する場合はじっくり最適なプランを選択する暇はないからである。
--一方、[[トランザクション]]処理のように、同じようなデータに対して同じようなSQLを何度も処理する場合には事前にじっくり最適なプランを選択する。

*SQLから論理プランへ変換する [#yd32ea24]

-UPADTE文やDELETE文などは、条件式の部分の処理はSELECT文と同じである。
-INSERT文は新たなタプルの追加処理なので処理手順はさらに単純になる。

**SELECT文の場合 [#b0bf10e6]

-ここで示す変換法よりも工夫次第では効率のよい論理プランができる。

1:FROM句のテーブルリストにあるすべてのテーブルの[[直積]]を作る。

 テーブル中にビューがある場合は、ビューを定義しているSELECT文の結果との直積を作る。

2:WHERE句があるときには、その条件に合致するものだけをステップ1の結果から選び出す。

3:GROUP BY句があるときは、ステップ2の結果の属性リストの値がすべて同じものをグループに分ける。その後は、このグループごとに処理する。

4:SELECT句の属性リストのうち、計算が必要なものは計算を行う。

 属性リストにはCOUNT,MAX,SUM,AVERAGEなどの複数のタイプから計算するものもある(集約関数)。集約関数の計算は、ステップ3のGROUP By句で分けたグループごとに行う。

 そうではないものは、タプルごとに計算する。

5:HAVING句がある場合は、ステップ4の結果のうち、条件に合うもののみを取り出す。

6:SELECTの属性リストに指定されたもののみを結果として取り出す。HAVING句では、SELECTの属性リストにない属性を使うこともできるので、SELECTの属性リストの取り出しは最後になる。

*論理プランの改善 [#ea56856b]

-論理プランの改善には、いくつかの[[関係代数]]の規則や性質を使うことになる。
--一番重要なのは、直積から等結合への変換である。
---等結合することで、作業用のタプルの数を大幅に減らすことができる。


*参考文献 [#l53a42e3]

-『RDBMS解剖学』