1

テーブルが非常に大きいため、多くの時間がかかる次のクエリがあります。このクエリは、疑似列 ROWID および ORA_ROWSCN もフェッチします。

select ROWID, ORA_ROWSCN, t.C1, t.c2, t.c5, t.c7, t.c9 from tab t

ヒント ALL_ROWS を使用してみて、統計も実行しましたが、まだあまり役に立ちません。提案してください。よろしくお願いします。

4

1 に答える 1

2

ROWID と ora_rowscn はどちらもデータ ブロック内にあります。

Rowid は次のもので構成されています。

  • オブジェクトのデータオブジェクト番号

  • 行が存在するデータファイル内のデータブロック

  • データ ブロック内の行の位置 (最初の行は 0)

  • 行が存在するデータファイル (最初のファイルは 1)。ファイル番号は、テーブルスペースに対して相対的です。

ora_rowscn は、行が存在するブロックの最終変更番号を示します (行自体ではありません。注意してください)。

大きなテーブルからすべての行を取得するための合計時間に大きく貢献しているものはありません (scn_to_timestamp 関数を使用していない場合)。

ここでの問題は、WHERE 句がなく、大きなテーブルからすべての行を取得するのに多くの時間がかかることです。本当にすべての行が必要な場合、クエリを多くの小さなクエリに分割するために使用できる列はありませんか?結果をより速く取得し始めることができ、プロセス全体 (日付列または ID 列) を並列化することさえできますwhere句でmodを使用できますか、そのようなものです)?

于 2014-08-18T17:00:39.010 に答える