sql >> データベース >  >> RDS >> Oracle

Oracleに100万行を挿入する最速の方法

    あなたのアプローチはメモリの問題につながります。最速の方法はこれです[nullシナリオを処理するためにDavidのコメントの後に編集されたクエリ]:

    insert into dtr_debtors1(SSN)
    select a.S1+level
       from dual,(select nvl(max(ssn),0) S1 from dtr_debtors1) a
    connect by level <= 10000 
    

    選択挿入は、すべてがRAMにとどまるため、最速のアプローチです。このクエリは、グローバル一時領域に入ると遅くなる可能性がありますが、DBの調整が必要です。これより速いものはないと思います。

    クエリによるメモリ使用の詳細:

    各クエリには、基本的に各クエリで使用可能なRAMである独自のPGA[プログラムグローバルエリア]があります。この領域がクエリ結果を返すのに十分でない場合、SQLエンジンはハードディスクのようなGolabl tempテーブルスペースの使用を開始し、クエリが遅くなり始めます。クエリに必要なデータが非常に大きく、一時領域でさえ十分でない場合は、テーブルスペースエラーが発生します。

    したがって、常にクエリを設計して、PGAにとどまるようにします。それ以外の場合は、危険信号になります。



    1. MyBatis、インサートの自動生成キーを取得する方法は? [MySql]

    2. 列が変更された場合にのみSQL更新トリガー

    3. postgresqlのユーザーのデフォルトパスワード

    4. Djangoと読み取り専用のデータベース接続