Database JUNKY

MySQL,MariaDBを中心としたブログです

大量のデータを一気に削除する。(truncate)

大量のデータを削除するには、通常のSQLですと,DELETE FROM XXX という指定をしてしまうと、トランザクションログも吐くので現実に耐えられない 遅さになると思います。このような場合、truncate を実行すれば、トランザクションログも書かず、即座にデータをクリアすることができるのです。

以下の例で、QKデータベース内のcommon.postalというTABLEの中身を削除します。

  1. qkにログインする。(dbuser に su) $ psql qk
  2. 現在のレコード件数を確認する。 qk=# select count(*) from common.postal;  count  --------  122852 (1 row)
  3. truncate を実行する。 qk=# truncate table common.postal; TRUNCATE TABLE
  4. 現在のレコード件数を確認する。(データが、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 で置き換えてしまうというなんとかです。