大量のデータを削除するには、通常のSQLですと,DELETE FROM XXX という指定をしてしまうと、トランザクションログも吐くので現実に耐えられない 遅さになると思います。このような場合、truncate を実行すれば、トランザクションログも書かず、即座にデータをクリアすることができるのです。
以下の例で、QKデータベース内のcommon.postalというTABLEの中身を削除します。
- qkにログインする。(dbuser に su) $ psql qk
- 現在のレコード件数を確認する。 qk=# select count(*) from common.postal; count -------- 122852 (1 row)
- truncate を実行する。 qk=# truncate table common.postal; TRUNCATE TABLE
- 現在のレコード件数を確認する。(データが、zero件になっていることを確認) qk=# select count(*) from common.postal; count ------- 0 (1 row)
以上で、データに消しこみが終了です。これも、ORACLE,SQL SERVERは持っているSQLですね。 DB2は標準ではもっていないのです。(v9.7)は、ORACLE互換の機能があるので対応は可能です。 すこし話がそれますが、DB2の場合で、それを実現するためには、こんな、(荒)技を使います。
$ db2 -v connect to db2db user userman using passwd $ db2 -v "import from /dev/null OF DEL REPLACE INTO SCHEMANAME.TABNAME" $ db2 -v connect reset
強引に、/dev/null で置き換えてしまうというなんとかです。