簡単なSELECTステートメントでOracleデータベースのEXPLAIN PLANを使用して、それがどのように機能するかを調べています。 EXPLAIN PLANの1つの出力では、table access by index rowid
と他のtable access by index rowid BATCHED
。それらの違いは何ですか?
ドキュメントには、このトピックに関する1つの文のみが含まれています。
https://docs.Oracle.com/database/121/TGSQL/tgsql_optop.htm#GUID-4180BA97-3E2C-41F9-B282-4FB3FF9532CB
手順1に示されているBATCHEDアクセスは、データベースがインデックスからいくつかの行IDを取得し、ブロック順序で行にアクセスしてクラスター化を改善し、データベースがブロックにアクセスする必要がある回数。
以下の(簡略化された)インデックスの例を考えてみましょう
+-------------+------------------+
| index value | block nbr-rowid |
+-------------+------------------+
| 1 | 015-000123 |
| 2 | 034-000527 |
| 3 | 088-000285 |
| 4 | 015-000889 |
| 5 | 088-000632 |
........
........
「通常の」(バッチではない)メソッドでは、Oracleはインデックスによって決定された順序で行を取得します。
バッチ方式では、Oracleはインデックスからいくつかのエントリを取得し、まずそれらをブロック数でソートし、次にブロック数で決定された順序でエントリを処理します。
この例でわかるように、ブロックは5回ではなく3回しかフェッチされなかったため、ディスクからのブロックの読み取り回数が減り、一部のブロックは2回(2回以上)ではなく1回だけ読み取られました。