1,400 万行を超えるデータベース テーブルがあります。
私が実行しようとすると:
delete from table
接続がハングアウトします。
最終的に削除されるように、すべての行を「バッチ」で削除するにはどうすればよいですか?
1,400 万行を超えるデータベース テーブルがあります。
私が実行しようとすると:
delete from table
接続がハングアウトします。
最終的に削除されるように、すべての行を「バッチ」で削除するにはどうすればよいですか?
削除は、ロールバックできるログに記録される操作であるため、非常に遅くなる可能性があります。テーブルを切り捨てるか削除して再作成できる場合は、それが最善の策です。または、この sql を実行できます。
BEGIN
loop
delete from table where rownum < 500
exit when SQL%rowcount < 499
end loop;
END
試してみる:
truncate table tblname
これには、ロールバックできないという利点があるため、そのアクションをログに記録する必要がなく、トリガーも発生しません。これにより、同等のものよりも大幅に高速になりdelete from tblname
ます。
それ以外の場合は、テーブル データに基づいて、削除するサブセットを作成できます。たとえば、姓を含むフィールド (できればインデックス付き) がある場合:
delete from tblname where lastname like 'A%'
これは単なる例であることに注意してください。次のようなものも使用できます
等々。何を選択するかは、削除しようとしているテーブルに完全に依存します。
truncate
その単純さのために、私自身はこのコマンドを好みます。