クエリの最適化の必要性
1687 ワード
クエリーの最適化の最終的な目的は、データベース・システムのパフォーマンスを向上させることですが、クエリーはなぜ効率的に異なるのでしょうか.SQLクエリの場合、同じテーブルに異なるアクセス方法があるためです.2つのテーブルの接続には異なる接続方法があります.複数のテーブルの接続にも異なる接続順序が存在する.したがって、指定されたクエリには、通常、同じ出力を実行する等価な実行計画が多く存在しますが、実行効率の差が大きいことがよくあります.以下の例では、異なる実行計画の効率の違いを説明することができる.
1つのデータベースに次の関係が含まれているとします.
従業員情報:emp(name,age,Sal,dno)
部門情報:dept(dno,dname,rloor,budget,mgr,ano)
勘定情報:aent(ano,type,balanee,bno)
銀行情報:bank(bno,bname,address)
次に、このような簡単なSQLクエリを考えます.
SELECT name,floor
FROM emp,dept
WHERE emp.dno=dept.dno AND sal>100K
関連するパラメータ情報は、以下の表2及び表1に示すように仮定する.
次の3つの異なる実行計画を考慮します.
P 1:B+ツリーを使用して、IOOKよりも給料が高いempのすべてのメタグループを見つけ、hashインデックスを使用して対応するdeptのメタグループを見つけます.
P 2:各deptのページについて、emp関係全体をスキャンします.empのメタグループが賃金条件が100 Kより大きく、部門番号がdeptページのメタグループと等しい場合、この2つのメタグループが形成した新しいメタグループはクエリー結果のメタグループとなる.
P 3:doptの各メタグループについて、emp関係全体をスキャンし、すべてのemp-doptメタグループペアを格納する.次いで、これらのメタグループペアをスキャンし、各メタグループの2つのdno属性が等しく、賃金が100 Kより大きいかどうかを確認する.
以上の3つの計画のI/0コストを計算すると,その効率の違いがわかる.P 1は約0.32秒かかり、P 2は1時間以上かかり、P 3は1日以上かかります.このように、異なる実行計画間の効率の違いは大きい.クエリー最適化テクノロジーの助けがなければ、データベースのクエリー・プロセッサは、データベース・システムのパフォーマンスを大幅に損なう最悪の実行計画を生成する可能性があります.クエリーの最適化は、可能な計画を列挙し、一定の方法でより良い、コストの小さい計画を選択して実行し、クエリーの効率を向上させることができます.
パラメータ
パラメータ値
リレーショナルempのページ数
20000
リレーショナルempのメタグループ個数
100000
Empでsal>100 Kを満たすメタグループの数
10
関係deptのページ数
10
リレーショナルdeptのメタグループ数
100
リレーショナルempのインデックス
emp.salにクラスタB+ツリーインデックス(深さ3)
リレーショナルdeptのインデックス
dept.dnoにクラスタハッシュインデックス(平均バケツ長1.2ページ)
バッファページ数
3
ディスク・ページへのアクセスのコスト
20ms