[解決済み] BATCHEDのインデックスによるテーブルアクセスとROWIDのインデックスによるテーブルアクセスの違い
2022-02-14 07:21:29
質問内容
私は
EXPLAIN PLAN
を、Oracleデータベースで単純な
SELECT
ステートメントがどのように機能するかを調べるためです。
の1つの出力では
EXPLAIN PLAN
という記述があります。
table access by index rowid
であり、他方では
table access by index rowid BATCHED
.
両者の違いは何ですか?
どのように解決するのですか?
ドキュメントには、このトピックに関する一文があるのみです。
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 は、quot;normal" (not batched) メソッドにおいて、インデックスによって決定された順序で行を取得します。
- ブロック15を検索し、このブロックから015-000123行を検索します。
- はブロック34を検索し、このブロックから行034-000527を検索します。
- 88ブロックを検索し、このブロックから088-000285行を検索する。
- ブロック15を検索 (再度) そして、このブロックから015-000889行を取得します。
- ブロック88を検索 (再度) そして、このブロックから 088-000632 行を取得します。
バッチ処理では、Oracleはインデックスからいくつかのエントリを取得し、まずそれらをブロック数でソートし、ブロック数で決定される順序でエントリを処理します。
- ブロック15を取得し、このブロックから015-000123と015-000889の行を取得する。
- はブロック34を検索し、このブロックから行034-000527を検索します。
- 88ブロックを検索し、このブロックから088-000285と088-000632の行を検索する。
この例では、ブロックの取得が5回から3回になり、ディスクからのブロック読み出し回数が減少していることがわかります。
関連
-
オラクル表領域拡張の詳細
-
PLSQLは、ローカルオラクルまたはリモートオラクルデータベースに接続し、ランダムスイッチ機能を実現します。
-
Oracle19c テーブルスペースの作成における落とし穴
-
オラクルユーザー作成プロセスの説明
-
オラクル・ラックのケーススタディ
-
[解決済み] ORA-01849: 時間は 1 から 12 の間でなければなりません。
-
[解決済み] ORA-00980 PLSQL で同義語の翻訳が有効でなくなった。
-
[解決済み] 1行のみ追加 "ORA-02290: チェック制約 (SYS_C0012762) 違反 ORA-01403: データが見つかりません"
-
[解決済み] Oracle SELECT TOP 10 レコード [重複]の場合
-
[解決済み] オラクル「(+)」。演算子
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ORCALテンポラリーテーブルの作成と削除
-
オラクルインデックス概要
-
Oracleデッドロック検出クエリとその処理
-
Oracle11gアンインストール完全版グラフィックチュートリアル
-
SQLPlusコマンドの使い方の説明
-
[解決済み] PL/SQLで、文字列中のシングルクォートをエスケープする方法は?
-
[解決済み] ORA-00900: 無効な SQL 文 - Oracle 10g のプロシージャを実行するとき
-
[解決済み] オラクル ユーザーデータでConnect By Loop
-
[解決済み] SQLステート [72000]; エラーコード [14300]; JDBCバッチアップデートを実行できませんでした。
-
[解決済み] カラムが存在するにもかかわらず、ORA-00904が発生するのはなぜですか?