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

非常に大きなOracleテーブルの更新

    updateの場合、OracleのUNDOログへの書き込みを回避するため ステートメントがテーブルのすべての行にヒットする場合は、create table as selectを実行する方がよいでしょう。 すべての元に戻すログをバイパスするクエリ。これは、6000万行にわたる影響をログに記録しているため、発生している問題である可能性があります。次に、古いテーブルを削除して、新しいテーブルの名前を古いテーブルの名前に変更できます。

    次のようなもの:

    create table new_people as
    select l.newid,
           p.col2,
           p.col3,
           p.col4,
           p.col5
      from people p
      join id_conversion l
        on p.id = l.id;
    
    drop table people;
    
    -- rebuild any constraints and indexes
    -- from old people table to new people table
    
    alter table new_people rename to people;
    

    参考のために、ここでいくつかのヒントを読んでください: http://www.dba-oracle.com /t_efficient_update_sql_dml_tips.htm

    基本的に新しいテーブルを作成していて、テーブルの一部の行を更新するだけではない場合は、より高速な方法であることが証明される可能性があります。



    1. SQL Updateステートメントを実行する前にテストするにはどうすればよいですか?

    2. MySQLのバージョンを確認する方法

    3. Python FlaskとMySQLを使用してゼロからWebアプリを作成する:パート3

    4. カンマ区切りのSQLであるIDを使用する