データベース系コネクタの差分転送では、前回の実行時から増えたデータを特定するために、増分データを判別するカラムを使用して以下の処理を実施します。
WHERE句による比較:前回取得した最終レコード以降の差分データを抽出
ORDER BYによる並べ替え:次回の転送時に使用する最終レコードの値の取得
この処理は、増分データを判別するカラムにインデックスを付与することで、データベースの負荷を軽減することができます。
以下にインデックスの有無による処理の違いを解説いたします。
インデックスがない場合
データベースは「前回の続き(差分データ)」が物理的にどこに格納されているかを把握できません。そのため、転送時には以下の負荷が発生します。
フルスキャンの発生
条件に一致するデータを探すために、テーブル内の全レコードを読み読み取ります。レコードの並べ替えの負荷
抽出されたレコードに対して、メモリ上で並べ替え処理を行います。
この状態では、テーブルにレコードが追加されるほど検索・並べ替えの負荷が高くなり、処理時間が増加していく懸念があります。
インデックスがある場合
インデックスは、データベースにおける「索引(目次)」の役割を果たします。インデックスを付与することで、以下のように処理が効率化されます。
抽出対象のレコードの特定
インデックスを参照することで条件に一致するデータの開始位置を特定できるため、過去の不要なデータを読み取ることなく抽出を開始できます。ソート済みの構造を活用
インデックス自体がすでに整列された状態で保存されているため、抽出時の並べ替え負荷が抑えられます。
コメント
0件のコメント
記事コメントは受け付けていません。