1

1,400 万行を超えるデータベース テーブルがあります。

私が実行しようとすると:

 delete from table

接続がハングアウトします。

最終的に削除されるように、すべての行を「バッチ」で削除するにはどうすればよいですか?

4

2 に答える 2

2

削除は、ロールバックできるログに記録される操作であるため、非常に遅くなる可能性があります。テーブルを切り捨てるか削除して再作成できる場合は、それが最善の策です。または、この sql を実行できます。

BEGIN
loop 
  delete from table where rownum < 500
  exit when SQL%rowcount < 499
end loop;
END
于 2009-11-19T22:38:43.413 に答える
2

試してみる:

truncate table tblname

これには、ロールバックできないという利点があるため、そのアクションをログに記録する必要がなく、トリガーも発生しません。これにより、同等のものよりも大幅に高速になりdelete from tblnameます。

それ以外の場合は、テーブル データに基づいて、削除するサブセットを作成できます。たとえば、姓を含むフィールド (できればインデックス付き) がある場合:

delete from tblname where lastname like 'A%'

これは単なる例であることに注意してください。次のようなものも使用できます

  • 給与 (<20K、20K-40K、40K-60K、...)。
  • SSN。
  • 経常収支。

等々。何を選択するかは、削除しようとしているテーブルに完全に依存します。

truncateその単純さのために、私自身はこのコマンドを好みます。

于 2009-11-19T22:34:23.750 に答える