1

unique1テーブルに存在するのと同じ順序でunique1テーブルからunique2テーブルにデータを挿入したい。

insert /*+ append */ into unique2 
        select * from unique1 A where not exists (select 1 from match1 B where A.  promolog_key = B. promolog_key) order by rowid asc;

上記のクエリは、修飾されたデータをunique1に存在するのと同じ順序で挿入しますか?

ありがとう

4

2 に答える 2

1

はい、通常、物理的な行の順序は同じです。

挿入時の行の順序付けは、ダイレクトパスの使用に依存します。これは、データウェアハウスや、特定のインデックスで有利な圧縮率や低いクラスタリング係数を取得するためにダイレクトパスに依存する他のシステムでは、かなり一般的な手法です(これは、削減するための強力な推進力になる可能性があります)ビットマップインデックスサイズ)。

ただし、機能的には、rowidによる順序付けは少し疑わしいようです。ソーステーブルがすでに目的の方法で順序付けられている場合は、origin1で全表スキャンをプロモートすることでその役割を果たします。それ以外の場合は、クラスタリング/圧縮を改善したい列を注文します。

インデックス順のテーブルまたはハッシュクラスターは、クラスタリングファクターに関して同様の効果をもたらしますが、役に立たない可能性のある制限があります。IOTの場合、ターゲットテーブルのメンテナンスをより効率的に行うために、選択の一部として行を並べ替えると、大きな挿入で役立つことがよくあります。

于 2013-02-19T17:00:26.027 に答える
0

オラクルでは、ステートメントでORDER BY句を指定でき、ドキュメントには次のように記載されています。INSERT

  • ORDER BYのサブクエリの句に関してはDML_table_expression_clause、順序は挿入される行に対してのみ、およびテーブルの各エクステント内でのみ保証されます。既存の行に対する新しい行の順序は保証されません。

したがって、新しいORDER BY行は、句で指定したのと同じ順序でコピー テーブルに挿入されます。これは、明らかにテーブルに既にある古い行には影響しません。

ヒントを使用しているため、範囲の制限は関係ない場合があります。/*+ append */したがって、ウォーターマークの上にのみ挿入されます (並列挿入でない場合は順次)。

于 2013-02-19T16:45:58.853 に答える