ベースのOracleSQL最適化された読書ノート

一般的なB-treeインデックスアクセスメソッドの一部でオラクル

  1. 唯一のインデックス・スキャン
  2. 索引レンジ・スキャン
  3. インデックスのフルスキャン - > NOT NULL制約が発注来る単一のブロックを読みます
  4. 高速全索引スキャン - マルチブロックが読み>の順序は、結果を保証することはできません   
  5. >いくつかの異なる値に適用状況先頭列 - インデックススキャンをスキップ

 メソッドの接続テーブル:

1.ソートマージ参加

      • 次のステップ:  
    1. 第一の標的SQL述指定された条件(もしあれば)T1にアクセスし、次にソートするカラムの結果に応じてT1接続テーブルにアクセスするには、ソートされた結果セットの後に、我々は1を書き込みます。
    2. 次に、SQL述部条件で指定されたターゲットは、(もしあれば)T2にアクセスするために、カラムの結果と接続テーブルT2に応じてソートする、行ソート結果セットは、我々は2を書き込みます。
    3. 最終的な結果セットとセット2の結果は、ソート・マージの最終実行結果として記録マッチングペアから除去マージ操作は、結合を実行します。
      • 長所と短所:

典型的には、はるかに少ないハッシュジョインジョイン、前者の使用の広い範囲、ハッシュは、典型的には、コネクタに接続されているソートマージの効率は同等の条件を使用することができ、ソートマージジョイン(他の条件もまた使用することができます例えば、<、<=、>、> =)。

 

2.ネストされたループ結合します

結果セットテーブル(それぞれ、内側ループと外側ループ)を得るための接続方法を行って、接続テーブル内の2つのネストされたループの二つのテーブルに依存します。

      • 次のステップ:
    1. まず、最適化は、テーブル駆動されるドライバテーブルたテーブルの特定のルールテーブルT1、T2に応じて決定されるであろう。外側のループのテーブル駆動装置は、内部ループは、テーブルを駆動するために使用されます。なお、表には、T2を駆動させ、駆動テーブルがT1であると仮定されます。
    2. 次に、ターゲットSQL結果がテーブルT1にアクセスするために駆動するために(もしあれば)の後に得られた述語の条件を指定して、駆動テーブルにアクセスするT1はセットと呼ばれます。
    3. 次に、駆動テーブルT2を通過しながら、結果はその後除去、すなわち物品の記録ドライブの結果は、次に、駆動テーブルT2を横断する、1セット削除し、一致するレコードが存在するかどうかT2を判断する接続状態を追跡するために、1セット横切ります同じ接続条件テーブルT2に、ドライブ1番目のレコードに設定された結果は再びトラバースT2を駆動し、一致するレコード、これまでに全てあっ横断ドライブ1レコードまで、結果セットがあるか否かを判定する。外側のループは、サイクルを対応テーブルT2を駆動し、内側ループ手段を横切る、ドライブサイクルに対応する結果セットを横断するように本明細書にいいます。明らかに、内側ループで駆動テーブルT2を横断する、レコードの数を駆動した結果に対応する外部ループセットを何度も行う、これは、「ネストされたループ」と呼ばれます。
      • 長所と短所:
    1. 駆動テーブルドリブン結果に対応するレコードの数が小さく設定、および(非一意のインデックス列駆動接続テーブルの存在下で、又は良好な選択)駆動される接続テーブルの列に一意のインデックスがあるとした場合、その後、時間ネストされたループの接続効率が非常に高くなります。もしレコードの数が、上記駆動テーブル、ネストされたループに接続された列にインデックスがあっても、結果セットのテーブルを駆動するためのドライブの多く接続の効率は高くなりません。
    2. 少ない長いドライブが結果セットをレコードとして、その前提条件がネストされたループ結合を行うと、結果セットが指定された条件は、(もしあれば)の後に得られたスケジュールアプリケーションSQL述部を駆動対象に駆動される有します結果セットは、テーブルは、駆動テーブルネストループジョインほど大きくすることができ、データの重要な目標SQL述部条件指定された量は、(もしあれば)結果セットダウン駆動させることができます。
    3. 行うすべての接続されたすべての操作を待つことなく、すなわち、それは返すように接続され、記録条件が成立接続されてきた最初であってもよいし、達成することができるネストされたループは、高速応答に参加:ネストされたループは、この方法の追加の利点を有していないに参加します結果を返す前に接続した後。ソートマージが参加し、ハッシュは最初のリターンが接続されていることができます参加し、ソートマージが最初にソートされるまで待つように参加しているため、接続記録が行われているすべての接続操作を待つことなく、条件を満たしているが、彼らは返却するのは初めてではありませんが、データを返す開始し、ハッシュを駆動するためにマージ操作を行った後に、すべてのデータを返す開始するために構築された後、結果セットは、ハッシュ表に対応するまで待つ必要が参加。

3.ハッシュ参加

(ハッシュ結合)に参加ハッシュは、結果セットの接続方法を取得する接続テーブルを作成するときにハッシュ演算が主に二つのテーブルに依存しています。

      • 次のステップ:
    1. Oracleは、パラメータのハッシュPartiton束(ハッシュバケットなるハッシュ・パーティション、ハッシュパーティション組成ハッシュテーブル)の数の値に基づいて決定されます。
    2. テーブルT1とT2は、SQL結果で指定された特定の述語条件(もしあれば)、Oracleはハッシュ結果セットが接続された選択された駆動される結果セットの濃度を与えるために少量のデータに適用され、それがそのT1ここで想定しています結果セットに対応するデータの量が比較的少ない、と呼ばSであり; T2は、データ量に応じた比較的大きな結果セットであり、Bとします 明らかにこの結果セットのSが駆動され、Bは、結果セットによって駆動されます。
    3. Oracleは、列がテーブルT1を行うハッシュ結合のレコードに合わせてSは、各レコードを読み込み、Sを横断し、各レコードします。ハッシュは同時に列に接続され、これらの2つのハッシュ関数は、ハッシュ値を計算し、我々はこれら2つのハッシュ関数はhash_func_1とhash_func_2で示されて構築された、2つのハッシュ関数を使用して構築され、それらが計算されますハッシュ値はhash_value_1のhash_value_2として分割して記録されています。
    4. Hash_value_1の対応S異なるハッシュバケットハッシュPartitonのに格納された対応するレコードの値によって、次にOracle、およびレコードが記録Hash_func_2と共に格納しながらもhash_values_2によって算出。ターゲット表のハッシュバケットレコードでその完全な行が格納されていません、だけで十分であろうターゲット表の列と列接続に関連するターゲットSQLクエリに位置して保存する必要があります。私たちは、Sに対応し、それぞれがSiであるハッシュPartitonに注意してください。
    5. シリコンの建物では、Oracleは、ビットマップ(BITAMP)を構築し、ビットマップは、Siの各々(すなわち、レコードの数がゼロよりも大きい)を記録ハッシュバケットを含んでいたかどうかをマークするために使用されます。
    6. データSの量が大きい場合にはハッシュテーブルに対応するSを構築する場合、その後、それがPGA作業領域の場合であってもよい外観に満ちています。Partitonに作業領域のOracleのほとんどを含むレコードの数がディスクに書き込まれます。この時間(TEMPテーブルスペース)をハッシュ。そして、作業領域が再び満杯だった場合、Oracleはつまり、選択は、レコードハッシュPartitonの最大数が含まれており、ディスクに書き戻さ、アクションを繰り返していきます、建物の過程では、ハ​​ッシュテーブルに対応するSを構築していきます。あなたはハッシュ・パーティションに対応するレコードを構築している場合のOracle以前に戻ってディスクに書き込まれている、ハッシュPartitonのOracleを更新するには、この時点では、すでにディスク上のハッシュ・パーティションに記録し、hash_value_2が直接これに追加したことを、ディスク上に行くだろう対応するハッシュバケット。それでも、ハッシュPartitonと、残りのすべてのハッシュPattitonの残りはディスクに書き戻されているハッシュ・パーティションのメモリー内のレコードの一部だけ極端な場合があり、注意してください。
    7. あなたはSアップ内のすべてのレコードを横断するまで、上記に対応するSを構築するプロセスのハッシュテーブルは、継続されます。
    8. Oracleは、すべてのSiの数に応じて、彼らは、ソートされたレコードが含まれていますし、それが置かれている場合、これらは、当然のことながら、順番ハッシュPatitionとできるだけ完全にメモリに(PGA作業域)に応じてソートされています高い、まだディスク上にあるハッシュ・パーティションの一部を手放すことはできません。
    9. これまでのところ、OracleはSを処理された、Bは現在のプロセスを開始することができます。
    10. オラクルは、B、Bは、各レコードが読み出されるトラバースし、ステップ3においてT2で作られたハッシュテーブルの列のレコードに係る接続、及びハッシュハッシュは全く同じです。すなわち、ステップ3 hash_func_1とhash_func_2のままであり、また、2つのハッシュ値hash_value_1とhash_value_2を計算します。

     。それの残りの部分を読む、あまりにも多くの単語

      • 長所と短所:
    1. ハッシュ結合は、必ずしもソートされることはありません、またはほとんどの場合、ソートは必要ありません。
    2. ハッシュテーブルドライブコネクタ列を選択的に可能な限り良好でなければならない対応に接続されており、したがって、記録ハッシュバケットの数は、選択に対応する影響、およびレコードの数ハッシュブケット直接のハッシュに影響を与えるされています効率の一致するレコードを見つけるBulket。ハッシュがBulketあまりにも多くのレコードが含まれている場合は、あなたが真剣に対応するハッシュは、実行効率を参加減らすことができ、パフォーマンスは、実行が長時間終了しなかったハッシュ結合のこの時点で典型的なもので、データベースは、データベース・サーバ上に存在しますこのアクションのレコードでハッシュバケツを横断することは行われている間、CPU占有率が高いですが、この時点でほとんどの時間は、ハッシュバケットレーン上のトラバース内のすべてのレコードに費やしたので、目標SQLの消費量を読み取るロジックは、非常に低いですPGAの作業領域は、そう、彼らは論理読み取り費やすことはありません。
    3. ハッシュCBOにのみ適用され、それだけで同等の条件を接続するために使用することができる参加(でも抗ハッシュ結合、Oracleが実際に同等に変換する等価結合)。
    4. ハッシュジョイン特にテーブルの接続を選択的小カラム非常に良い場合、この時間ハッシングに、テーブル小さなテーブルと大きなテーブルと接続された結果との間の接続は、レコードを設定する状況の多数に非常に適しています接続の実行時間とフルテーブルではなく、時間のかかる大きなテーブルをスキャンするように近似することができます。

自己理解:そのドライブテーブル(小テーブル)のハッシュ値を計算することであり、メモリ内またはディスク上に格納され、その後、表の各行のハッシュ値を算出するが駆動される(大テーブル)、及びカザフスタンと、この大規模なテーブルを横断中一致するレコードの値が小さなテーブルを見つけることが希望です。一致レコードを返します。

4.コネクタデカルト積

 

おすすめ

転載: www.cnblogs.com/studyking/p/11595595.html