RDBMS のデータ削除

  delete ( DML )



Oracle のドキュメント(スキーマ・オブジェクトの管理)では、以下のように述べられています。

  表からすべての行を削除するには、次の3通りの方法があります。
  • DELETE文を使用する。
  • DROP文とCREATE文を使用する。
  • TRUNCATE文を使用する。

データを削除する最も一般的な方法は、 delete 文で削除する方法です。

delete 文は、 where 句により条件を指定して行単位で削除するのが基本ですが、
条件無しで実行するとテーブル全体をクリアします。

この場合、トランザクションを有する RDBMS では、削除処理そのものが rollback 対象になる為、
リソースの消費と処理時間の消費が、テーブルそのものの更新以外にも発生します。

ですから、大量( 数百万件 ) のデータを delete 文で削除するような事は絶対に避けなければなりません。
通常、バッチ処理での更新(削除)では、数件(1件)毎に commit 処理を行います。
しかし、commit の回数が多くなればなるほどそのぶん全体の処理時間は増大します。


  truncate table (ddl)



通常、テーブルのデータクリアはこの SQL で処理します。
truncate table は、トランザクションとは関係なく処理されるので、トランザクション中に
実行すると、自動的に静止点が確立されます( commit される )

  drop してから 再度 create する

機能だけで言えば、truncate のほうが優れています。

テーブルを削除すると、テーブルに依存するオブジェクトが無効になり、意図せぬ不具合を起こす可能性があるからです。

しかし、MySQL、Oracle、PostgreSQL では、create に as select を使った構文があり、
テーブル作成と同時に初期データを投入するという事も可能です。
( EXCEL、MDB、SQLServer、PostgreSQL では、同等の select into 構文があります )

いずれにしても、どのような方法を使ったほうが確実でリスクが少ないかを
ケース毎に熟考する必要があります。











   SQLの窓    create:2009/07/09  update:2014/09/07   管理者用(要ログイン)





フリーフォントWEBサービス

SQLの窓WEBサービス

SQLの窓フリーソフト

写真素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ