LeetCodeのDatabaseカテゴリで見つけたTRUNCATE TABLEについて

LeetCodeのDatabase問題にて。

181. Employees Earning More Than Their Managers
という問題を解いた時の話。

LeetCodeのDatabaseカテゴリの問題ではSQL Schemaという欄があり、どういったクエリを実行して該当テーブルが作成されているか、またその中に入っているデータはどういったものかを見ることができる。

その中にTRUNCATE TABLE Employeeという一文を見つけた。

Employeeはテーブル名なのでTRUNCATE TABLE テーブル名という使い方をするものなのだろう。

恥ずかしながら知らなかったので調べてみたところ、指定したテーブルの全てのデータを削除するという内容らしい。
これまではそういった操作はDELETE文で実行していたが、どうやらTRUNCATE TABLE文には以下のようなメリットがあるらしい。

  • オートインクリメントの初期化
  • 大量のデータが存在する場合はDELETE文よりも高速であること

オートインクリメントの初期化がされるのは知りませんでした。確かにDELETE文だと初期化されなかった記憶があるので助かります。

削除が高速なのはDELETE文はあくまで特定のデータを削除することに特化しているからなのだろうか?確かに全て消去しかないのと特定の条件を付けられるものだと後者の方が処理は複雑になる傾向があるが。ここら辺も根本的な理由を調べる機会を設けたいな。

一方で、DELETE文を実行した際のログなどを記録するようなトリガーを設定していても、TRUNCATE TABLE文はDELETE文とは関係ないので当然追跡はできません。そこには注意が必要ですね。

コメント

このブログの人気の投稿

Braveブラウザの同期機能をiPhoneで設定した話。

JavaのindexOf関数はナイーブ法で実装されているらしい

C++のstd::lower_bound()とPythonでの話。