ここから本文です

TRUNCATEとDELETEの違いを、多数派のSEは意識しているのでしょうか。 SQLを使っ...

s0c********さん

2017/5/2706:38:09

TRUNCATEとDELETEの違いを、多数派のSEは意識しているのでしょうか。

SQLを使っている普通(多数派)のSEは、TRUNCATEとDELETEの違いを意識しているのでしょうか。

DBMSによって機能が違う部分は意識しないといけないのですが、単純にテーブルのデータを全削除するときに「DELETE」コマンドで全削除しても、『「TRUNCATE」して…』などとは言わないのでしょうか。

技術的な質問ではなく、コミュニケーション面と言うか、言葉の使い方をTRUNCATEとDELETEで意識的に使い分けているかの質問です。

閲覧数:
1,726
回答数:
3
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

nor********さん

2017/5/2720:49:27

>「DELETE」コマンドで全削除しても、『「TRUNCATE」して…』

これは言いません。「全件(全行)削除」とは言っても。逆に「TRUNCATEして」を「DELETEして」とも言わないと思います。

TRUNCATEの動作についてはRDBMSによって大きく異なります。
ORACLE、MySQLなどはTRUNCATEについてROLLBACKが出来ません。

なのでこれらのRDBMSを使用するSE、プログラマは否応なしにDELETEとTRUNCATEについて違いを認識せざるを得ません。
全件削除するにしてもトランザクション内として行う場合はDELETEしか使えません。

一方SQL SERVER、PostgreSQLのTRUNCATEはROLBACK可能です。
なのでTRUNCATEと全件DELETEの違いについて意識することは相対的に低くなります。
意識する場合の多くはパフォーマンスが問題になる時でしょう。
そもそもで言うと業務系SE、プログラマがTRUNCATEを使う機会は限られると思います。多くは入力テーブルを一括で累積データテーブルに追加して入力テーブルをクリアするような場合。
そうした要件がなければTRUNCATE自体使用する機会は少ないでしょう。

あとコミュニケーションの問題としては「全件削除」を「全件DELETE」と表現する場合もあります。
この場合に「DELETE」を使うか「TRUNCATE」を使うかは、RDBMSと要件しだいです。
「TRUNCATE」の存在を認識しているSE、プログラマがどれくらいいるかという問題もあると思いますが。TRUNCATE自体がSQL規格にありませんし。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

per********さん

編集あり2017/5/2713:59:17

多くの業務系SEはSQLはそこそこ使えても、ミドルウェアそのものをあまり理解してないので、そこら辺の違いは分かっていない場合が多いと思われます。
インフラ寄りのSEは分かっている人が多いのではないでしょうか。
こうなってしまう理由もあると思います。
業務系SEは、致命的にパフォーマンスが悪くない限りは「動けばそれでいい」発想。
インフラ系SEは普段からディスク、メモリ、性能を気にしているからだと思います。

そして業務系SEの方がインフラ系よりも多数派だと思っているので、「多数派は分かっていない」が答えになるのではないかと

言葉の使い分けを意識できているかどうかは、この辺りの違いでしょうかね。

ちなみに私は業務系です。
ビッグデータを処理していくうちに必要にかられて覚えた業務系SEですね笑

以下、一応、具体的な違いも答えてみます。
間違っていたらごめんなさいね。
また、DBMSによっては多少の違いもあるかと思います。

違いは3つだと思ってます。
1つはindexの整理方法
もう1つは表スペースの整理方法。
最後はログの出力方法。

deleteは所詮レコード単位に削除する事を可能とする「SQL」なので、レコードを削除しながらindexの再構築をするものだと思っています。
また、ディスク上に存在するテーブルデータの整理(デフラグ)を行わないため、ディスク使用量は減らない。

truncateは特定のテーブルに存在するデータを全て削除する目的とする「ユーティリティ」なので、indexの再構築なんてしません(indexキーは残しますが、indexデータそのものは全部削除します)
また、ディスク上のテーブルスペースは最適化されます。

最後に、ログの出力
deleteは、レコード単位にログ出力します。
ディスクI/Oが発生するため遅い、且つログフルになる可能性があるため、大量データの削除時には注意が必要。
truncateはテーブル単位のログ出力なので、そんな心配は不要。

結果的に、deleteは低速且つディスク使用率は下がらず、truncateは高速且つディスク使用率が下がる。

プロフィール画像

カテゴリマスター

pri********さん

2017/5/2710:40:31

多数派のSEって誰?

大多数のSEってこと?
わざわざ用語を言うときは意識する。
意識しないときは、貴方も書いてあるように全削除とかデータクレンジングとか、もっと簡単に、消しといてと言うのではないでしょうか。

シーケンスも戻さないと行けないときとかで、指示相手が経験の浅い子の時は意識してコマンドで指示します。それでもやらかす子はやらかしますが。

技術に弱いSEでも何故かDBについては明るい事が多く、無駄にOracle 用語やSQL Server 用語を使う輩もいるので、意識しているんじゃないですかね?

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる