3

さまざまな結合アルゴリズム(ネストループ結合、マージ結合、インデックス結合、ハッシュ結合、およびその他のバリエーション)と、それらをいつどのように使用するかを理解するのに問題があります。具体的には、次のクエリを最も効率的に実行するためのクエリツリーを作成するように依頼されました。

SELECT E.Name
FROM Employee E, Department D, Works_On W, Project P
WHERE E.DNO = D.DNO and E.SSN = W.ESSN and P.PNUM = W.PNUM and
    P.Budget > 50 and E.Sex = 'M' and E.Hobby = 'Yodeling' and
    D.DName = 'Rational Mechanics';

必要に応じてスキーマを提供できます。基本的に、4つのテーブルは

従業員(SSN、名前、DNO-部門番号、給与、性別)、
部門(DNO、DName、予算、場所、MGRSSN)、
Works_On(ESSN、PN-プロジェクト番号)、
プロジェクト(PN、PName、予算、場所、目標) )。

左の深い結合ツリーを描画しましたが、各結合にどのアルゴリズムを使用するかわかりません。各アルゴリズムをいつ使用するかについての説明、またはそれを説明するリソースへのポインターを入手できれば、それは非常に役立ちます。

編集:SQLでさまざまな結合を指定する方法については質問していませんが、一般的な結合についてのみ質問しています。また、どのテーブルにもインデックスが付けられているとは言われませんでしたが、インデックス結合を行うだけでインデックスを付けることができると言われました。また、ツリーの構造を作成するために使用した、ヒューリスティックにクエリツリーを作成するための統計も提供されました。

4

2 に答える 2

3

通常、データベース システムに任せて、最適なクエリ実行プランを選択し、最適な結合アルゴリズムを選択します。これは、テーブルに関する使用可能なインデックスと統計データ (テーブルに含まれる行数や、行に含まれる異なる値の数など) によって異なります。さらに、結合アルゴリズムは、どのアルゴリズムが実装されているか、データがクラスター化されたテーブルまたはインデックス構成テーブルを使用して格納されているかどうかなど、データベース システム固有のものにも依存します。

クエリが異常に遅いか、アプリケーションのボトルネックとして識別されている場合にのみ、実行計画に影響を与えようとします。

入手可能な情報に基づいて、最適な実行計画を判断することはできません。

于 2012-12-10T20:23:03.490 に答える