2009-04-27 8 views
1

多くの索引があるOracleデータベース表に、約200万行のデータを挿入するにはどうすればよいですか? インデックスを無効にしてからデータを挿入する方法があることは知っています。誰が私に他のオプションが何であるか教えてもらえますか?SQLチューニング

+0

意味のある回答を得るためには、追加情報が必要だと思います。 UNDOのサイズが十分に大きければ、挿入を達成することが*唯一の*目標であれば問題ありません。読込み一貫性/ロールバックのために挿入を単一のトランザクションにする必要がありますか?挿入中に、他のソースからの表への同時DMLがありますか?これを単一の操作として実行する時間が非常に長くなるようなアプリケーションの性質ですか? – dpbradley

+0

データを1つのトランザクションに挿入したい – venkat

答えて

0

レコードの挿入方法がわかりません。できれば;小さな塊にデータを挿入します。あなたがわからいる場合は、私の経験では20Kレコードの50セットは、多くの場合、迅速に1×1000000

より...

0

をデータベースファイルを使用すると、挿入時に、データベースの成長からあなたを救う開始する前に十分な大きさであることを確認していますインデックス以外にも、参照と制約のチェックを無効にすることができます。また、トランザクション分離レベルを下げることもできます。

これらのオプションにはすべて価格が付いています。各オプションは、インデックスキーの順序で

1

バルク・ロードで終わるかもしれ意味で破損したデータを持っていることのあなたのリスクを増加させます。これはOracle用の標準バルクロードユーティリティであり、使用方法がわかっていれば良い仕事です(Oracleと同じように)。

1

あなたは、挿入シーケンスは、大きなキャッシュ値を持っていることを確認します(1000は通常十分です)

  • 降下をsequence.nextvalを使用する場合、私はそれらのいくつか

    • を書いた下に挿入ドを固定するために多くのトリックが存在します挿入する前にインデックスを作成してから作成してください(削除する前にインデックスの作成スクリプトを作成してください)。作成中にパラレルオプション
    • を使用することができます。あなたが選択し、select文のためと並列ヒントを与えることができます挿入する場合は、あなたのデータの確実である場合は、NOVALIDATEオプションを使用することができます
    • (NOVALIDATEオプションがオラクルに対して有効である、他のRDBMSシステムは、おそらく同様のオプションがあります)あなたは別の選択肢としてAPPENDヒント(ダイレクト・パスはを挿入)(ダイレクト・パス・インサート・コンセプトはオラクルに対して有効である、他のRDBMSシステムは、おそらく同様のオプションを持っている)
  • 0

    を使用することができます挿入し、1 Oracleを使用することができます高度で高速なデータ・ポンプ(expdp、impdp)ユーティリティの可用性10 G以降。ただし、Oracleは引き続き古いエクスポート/インポート(exp、imp)をサポートしています。

    Oracleはいくつかの方法より速く、他よりも、データの読み込みのために多くの選択肢を提供してくれます:

    • ORACLE10データ・ポンプのOracleインポートユーティリティ
    • SQLインサートとのため
    • 文PL/SQLのバルクロードをマージPL/SQL演算子forallを
    • SQL * Loaderの

    The pros/cons of each can be found here ..

    関連する問題