データベース

第7章 データベース管理システム
7.1 データベース管理システムの概要
7.2 データベースの格納方式
7.3 問合せ処理
7.3 問合せ処理
1.問合せ処理の概要
(a) 問合せ処理手順
①問合せを内部表現に展開する。
②内部表現をより効率良く処理できる形に変形する(最適化)
③効率の良い処理プランを生成し記憶する。
④処理プランを実行する。
(b) 内部形式の例
(問い合わせグラフ)
SELECT 業者名
FROM 業者
WHERE 所在地='東京' AND
業者番号 IN (SELECT 業者番号 FROM 取引
project 業者.業者名
WHERE 個数>200)
project :射影
join
:結合
restrict :制限
join 業者.業者番号=取引.業者番号
restrict 所在地='東京'
restrict 個数>200
業者
取引
関係代数による表現
Proj [業者.業者番号]((Rest [個数>200] 取引)
Join [取引.業者番号=業者.業者番号]
(Rest [所在地='東京'] 業者))
project 業者.業者名
project :射影
join
:結合
restrict :制限
join 業者.業者番号=取引.業者番号
restrict 所在地='東京'
restrict 個数>200
業者
取引
最適化の考え方
以下の選択肢の中から最も効率が良いと予測される方法を選択する。
①制限は結合の後で行うこともできるのでどちらを先にやるか。
②結合の順序を入れ替えても同じ結果になるのでどちらの結合を先にや
るか。
③どの枝を先に処理するか。
④関係をアクセスするのに索引を使用するかしないか。
2.基本演算の処理方法
(a) 制限の処理方法
【例】
SELECT 部品番号
FROM
部品
WHERE 部品名='ボルト' AND 大きさ=20
最も簡単な関係スキャン
部品のタプルをすべて読み、ひとつひとつ条件をチェックする。
表が大きい場合は効率が悪い。
ただし、どちらかの検索条件中にキーが含まれている場合や、
属性に索引がついていればキー指定呼び出しができる。
キー指定呼び出し
索引のある属性を用いて、その属性に関する条件を満たすタプルだけを
呼び出す。(一部のレコードだけを呼び出す)
【両方に索引がある場合】
①どちらかの索引によりタプルを呼び出し、もう一方の条件をチェック
する方法。
②2つの索引を用いてどのタプルが条件を満たすかを判別してからタプ
ルを呼び出す。
複数の属性に索引が付けられている場合
どの索引を用いるかによって効率が異なる。
複数の処理プランを比較し、コストを比較することが必要
(b) 結合の処理方法
①入れ子ループ法
一方のタプルを1つ読み出し、それと結合できるタプルを他方の関係
から読み出して結果を生成し、繰り返す。
②マージ結合法
それぞれの関係を結合対象の属性の値でソートした後、両者を昇順(ま
たは降順)に読みながら比較し結合処理を行う。ソート時間がかかるが、
結合処理は短い。
③ハッシュ結合法
結合条件が統合の場合にのみ適用可能。それぞれの関係のタプルの結合
対象属性値をハッシュし、ハッシュ値が同一のタプルの組合せについて
結合可能かを判定して結果を生成する。
結合の順序
R join S
S join R
結果は同じだが、両者のタプルの数、属性
の数の組合せによって処理時間が異なる。
3.問合せの最適化
①一般の問合せでは、基本演算の組合せで処理するので最適
化が複雑になる。
②実際のデータの統計的性質を用いても完全に予測すること
は難しい。
③逆に最適化処理のための時間が増大し、逆効果になること
もありうる。
経験則に照らして、多くの問合せに対して効率がよいと
わかっている方法に限定する。
制限演算の優先(経験則)
制限演算を先に行ってから他の処理を行う。
タプルを少なくしてから他の処理をすると
処理時間を短縮できる。
処理負担の大小(経験則)
①ANDで結ばれたWHERE句では処理木の葉から根元に向けて処
理されるので、後に処理負担の軽い条件を記述するほうが
効率的。すなわち処理負担の重い条件を先に記述する。
②ORで結ばれたWHERE句では、並列に並ぶ処理木に変換され、
最初の方から処理されるので、ANDとは逆に処理負担が軽
い条件から記述する方が効率的。
関係代数式の変形
複数の式で同一の結果が得られることが多い
等価な関係代数式を求め
よりコストの小さな表現を選ぶ。
変形規則
以下のような変形規則を用いて最適な問合せに変形
(統計的な処理時間予測が必要)
①結合と直積の可換則(演算対象の入替え)
②結合と直積の結合則(演算順序の入替え)
③射影の吸収(複数の射影を1つの射影に変換)
④制限の可換と複合(複数の制限を1つの複合制限に変換)
⑤制限と射影の交換
⑥制限の分配(制限と他の演算の交換)
⑦射影と直積の交換
⑧射影と和の交換
⑨制限条件と和の交換
⑩制限条件と積の交換