Oracleの行連鎖と行移行の違いは?

Oracleのパフォーマンスに影響する行移行行連鎖。今回は行移行と行連鎖について解説します。

Oracleの行連鎖とは

Oracleの行連鎖とは何でしょうか?Oracleはデータをブロックという入れ物にいれます。通常は1つのブロックの中にいれますが、大きなデータの場合は入りきりません。そうなると1つ目のブロック、2つ目のブロックにまたがってデータを入れることになります。

2つのブロックにまたがってしまった状態・・・これではデータを抽出する際にパフォーマンスが遅くなります。1つのブロックだけであればそのブロック内だけで完結しますが、2つのブロックにまたがっていれば当然2つのブロックをみないといけないからです。

データだけでなくモノの整理でもそうですよね?例えばたくさんの靴をもっていて、靴箱だけにいれておけば探すのに苦労しません。でも押入れにもいれてあったり、クローゼットにもいれてあったり、いくつかの場所に点在していたら、探すのに苦労します。

できれば1箇所にしておくのがベストだけどそうなっていない。このように行連鎖はいくつかのブロックにまたがっている状態をいいます。

Oracleの行移行とは

それではOracleの行移行とは何でしょうか?行連鎖と行移行・・なまえは似ています。行移行は文字通り、行が移行(移動)してしまった状態のことをいいます。例えば、あるブロックにはデータが2つ入っています。データ1、データ2とします。このデータ2を更新(UPDATE)した結果、サイズが大きくてブロックの空きには入りきらなかったとしたら?更新データがブロックに入りません。

この場合は、データ2をこのブロックから移動して別のブロックへいれます。そして元のブロックには新しいブロックへの目印がつけられます。「データ2は別ブロックにありますよ」という目印です。この状態でデータ2を検索する場合は、元のブロックを探し、目印をみつけたらさらに新しいブロックへ探しにいきます。2つのブロックを探さないといけないので手間ですよね。

行移行はこのように入りきらなくなったデータが移動されたことをいいます。

Oracleの行連鎖と行移行のまとめ

  • 行連鎖は複数ブロックにまたがった状態をいいます。
  • 行移行は別のブロックに移動してしまった状態をいいます。

どちらも複数のブロックにまたがってしまったのでOracleのパフォーマンス低下の恐れがあります。

以上、Oracleの行連鎖と行移行の解説でした。