InnoDB使用時はtruncateは実際にはdeleteが発行される
上司から聞いた事シリーズ。
タイトルだけで全てを言い終えるのはいつもの事。
mysqlでInnoDBエンジン使用時に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 としか出ない。ので分からん。