だるろぐ

だるいぶろぐです

InnoDB使用時はtruncateは実際にはdeleteが発行される

上司から聞いた事シリーズ。
タイトルだけで全てを言い終えるのはいつもの事。


mysqlInnoDBエンジン使用時にtruncateコマンドを打っても、実際に発行されるのはdelete文。遅いです。

もしテーブルを参照する外部キー制約があれば、InnoDB テーブルに対しては、TRUNCATE TABLE が DELETE にマップされ、そうでなければ、高速切断(テーブルのドロップと再作成)が利用されます。
http://dev.mysql.com/doc/refman/5.1/ja/truncate.html

とのこと。外部キー使ってなければちゃんとtruncateが走るらしい。
あとは

外部キー制約の有無に関わらず、AUTO_INCREMENT カウンタが TRUNCATE TABLE によってリセットされます。

だそうなのでどんな場合でも主キーのナンバリングはリセットされて1から始まる。


実際に内部でどっちが実行されてるかを見たいんだけど、 my.cnf に log=/path/to/do.log とか書いて外部キー有り・無し両方でtruncate発行してクエリログを記録しても、 truncate table hoge としか出ない。ので分からん。