削除、切り捨て、ドロップの違いと選択方法

削除、切り捨て、ドロップの違いと選択方法

序文

先週、同僚が私に尋ねました。「兄さん、MySQL にバグを見つけました。午後にディスクをクリーンアップするために 100 万の MySQL データを削除しましたが、ディスクは小さくなるどころか、さらにいっぱいになりました。」

それでどうやって削除したのですか?

「テーブルから削除」

「当然ですね。実は、MySQL データを削除する方法はいくつかあります。あなたの状況のようなシナリオでは、DELETE は使用しないでください。では、説明しましょう。」

MySQL でデータを削除する方法は何ですか?

一般的に使用される削除方法は 3 つあります。delete、truncate、drop キーワードによる削除です。これら 3 つの方法はすべてデータの削除に使用できますが、シナリオは異なります。

1. 実行速度に関して

削除 > 切り捨て >> DELETE

2. 原則として

1. 削除

TABLE_NAME から xxx を削除

1. DELETE はデータベース DML 操作言語に属します。データのみを削除し、テーブル構造は削除しません。実行されるとトランザクションが実行され、トリガーがトリガーされます。

2. InnoDB では、DELETE は実際にはデータを削除しません。MySQL は実際には削除されたデータを削除済みとしてマークするだけです。したがって、DELETE がテーブル内のデータを削除しても、ディスク上のテーブル ファイルが占めるスペースは削減されず、ストレージ スペースも解放されません。削除されたデータ行を非表示に設定するだけです。ディスク領域は解放されませんが、次回データを挿入するときに再利用できます (再利用 → 上書き)。

3. DELETE が実行されると、削除されたデータはまずロールバック セグメントにキャッシュされ、トランザクションがコミットされた後に有効になります。

4. delete from table_name はテーブル内のすべてのデータを削除します。MyISAM の場合、ディスク領域はすぐに解放されますが、InnoDB ではディスク領域は解放されません。

5. delete from table_name where xxx の条件付き削除の場合、InnoDB も MyISAM もディスク領域を解放しません。

6.削除操作後にoptimize table table_nameを使用して、ディスク領域をすぐに解放します。 InnoDB か MyISAM か。したがって、ディスク領域を解放するために、削除後にテーブルの最適化操作を実行してください。

例: テーブルが占有するディスク容量を確認するための SQL 文は次のとおりです: (表示単位として M、データベース名: csjdemo、テーブル名: demo2)

concat(round(sum(DATA_LENGTH/1024/1024),2),'M') を table_size として選択します。 
 information_schema.tables から 
 ここで、table_schema='csjdemo' かつ table_name='demo2'; 

次に、スペース最適化ステートメントを実行すると、実行後にテーブル サイズが変更されます。

テーブル最適化デモ2 

このテーブルのサイズを見ると、テーブル構造のサイズだけが残っています。

7.削除操作は行ごとに実行され、行の削除操作ログは、ロールバックおよびREDO操作のREDOおよびUNDO表領域に記録されます生成される大量のログもディスク領域を占有します

2. 切り捨てる

テーブル TABLE_NAME を切り捨てる

1. 切り捨て: データベース DDL 定義言語に属し、トランザクションを経由せず、元のデータはロールバック セグメントに格納されず、操作によってトリガーはトリガーされません。

実行後すぐに有効になり、取り戻すことはできません。 実行後すぐに有効になり、取り戻すことはできません。

2. truncate table table_name は、InnoDB または MyISAM に関係なく、すぐにディスク領域を解放します。テーブルの切り捨ては、テーブル構造ファイルがすでに存在するなど、テーブル作成プロセスが最適化されている点を除いて、実際にはテーブルを削除してから作成することに少し似ています。したがって、速度はドロップ テーブルの速度に近くなるはずです。

3. Truncate を使用すると、テーブルをすばやくクリアできます。そして、auto_increment の値をリセットします。

ただし、ストレージ エンジンの種類によっては、次の点に注意する必要があります。

  • MyISAM の場合、truncate は auto_increment 値を 1 にリセットします。削除後も、テーブルは auto_increment を維持します。
  • InnoDB の場合、truncate は auto_increment 値を 1 にリセットします。削除後も、テーブルは auto_increment を維持します。ただし、テーブル全体を削除した後に MySQL を再起動すると、再起動後に auto_increment は 1 に設定されます。

つまり、InnoDB テーブル自体は auto_increment を永続化できません。テーブルを削除した後も、auto_increment はメモリ内に保存されますが、再起動後に失われ、1 からしか開始できなくなります。実際、再起動後の auto_increment は SELECT 1+MAX(ai_col) FROM t から開始されます。

4.切り捨てを使用する場合は、特にバックアップがない場合は注意してください。オンラインテーブルを誤って削除した場合は、すぐに中国民用航空に連絡してください。チケット予約電話番号: 400-806-9553

3. ドロップ

テーブル名を削除します

1. Drop: Truncate と同じ、データベース DDL 定義言語に属します。

実行後すぐに有効になり、取り戻すことはできません。 実行後すぐに有効になり、取り戻すことはできません。

2. drop table table_name は、InnoDB か MyISAM かに関係なく、ディスク領域を直ちに解放します。dropステートメントは、テーブル構造が依存する制約、トリガー、およびインデックスを削除します。テーブルに依存するストアド プロシージャ/関数は保持されますが、無効になります。

3.ドロップを使用する際はご注意ください。フォームを削除して逃げたい場合は、チケットの予約が成功した後に操作を実行してください。チケット予約ホットライン: 400-806-9553

これを次のように理解することができます。本の場合、削除は目次を切り取ること、切り捨ては本のコンテンツを切り取って燃やすこと、ドロップは本を燃やすことです。

要約する

これで、delete、truncate、drop の違いと選択方法についての記事は終了です。delete、truncate、drop の違いと選択方法についての詳細は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL の DROP、TRUNCATE、DELETE の違いについて詳しく説明します。MySQL をゼロから実装します。
  • SQL Server での drop、truncate、delete ステートメントの使用
  • ドロップ、切り捨て、削除の違い
  • データベース内の Drop、Delete、Truncate ステートメントの類似点と相違点の比較 (例付き)
  • SQL の drop、delete、truncate の類似点と相違点の詳細な説明
  • テーブルを削除するいくつかの方法(削除、ドロップ、切り捨て)の簡単な分析
  • MySQL テーブル削除操作の実装 (delete、truncate、drop の違い)
  • ドロップ、切り捨て、削除の違いを数秒で理解する
  • SQL 削除ステートメント DROP、TRUNCATE、DELETE の違い
  • データベースを削除して逃げる方法さえ知らないかもしれません(データを削除するには、削除、ドロップ、切り捨てを行います)

<<:  SNMP4J サーバー接続タイムアウト問題の解決策

>>:  UDP DUP タイムアウト UPD ポート状態検出コード例

推薦する

JavaScript プログラムのループ構造の詳細な説明

目次構造を選択ループ構造その間…しながらforループ…のために…で…の…のためにまとめループの終了壊...

IE7でソースファイルを含むページを開くとページが空白になる問題の解決方法

質問:私のブログのエンコーディングは utf-8 です。ページを開くと空白になっていることもあります...

Vue バックグラウンドでステータス ラベルをエレガントに記述する例

目次序文最適化変数の抽出二次包装 el-tag コンポーネント使用要約する序文バックエンドシステムの...

Vue の NetEase Cloud Music Player インターフェースを模倣したシンプルな実装プロセス

仕事のプロジェクトのニーズにより、曲の再生が必要となり、さまざまな資料を参考にして、NetEase ...

HTML で点線の境界線を設定する方法

CSSスタイルとHTMLタグ要素を使用するさまざまな HTML タグに点線の境界線を追加するために、...

Vueはビデオ再生を実装するためにビデオタグを使用します

この記事では、ビデオタグを使用してビデオ再生を実装するVueの具体的なコードを参考までに共有します。...

Docker 上で Redis クラスターを構築する

目次1. イメージをプルする2. Redisコンテナを作成する3. コンテナを起動するためにクラスタ...

MySQLは1つのテーブルからデータをクエリし、それを別のテーブルに挿入する実装方法

MySQLは1つのテーブルからデータをクエリし、それを別のテーブルに挿入する実装方法ウェブサイト開発...

完全バックアップとポイントインタイムバックアップにmysqldumpを使用する方法

Mysqldump は MySQL の論理バックアップに使用されます。高速ではありませんが、柔軟性が...

MySQL の日付と時刻の加算と減算のサンプル コード

目次1.MySQLは時間間隔を加算または減算します2. 日付を減算する最近、MySQL を見直してい...

ウェブデザインを改善するための 8 つの CSS ツールを共有する

ウェブサイトのデザインを編集または変更する必要がある場合、CSS が重要な役割を果たします。 CSS...

JavaScript で実装された 6 つの Web ページ画像カルーセル効果の詳細な説明

目次1. マウスがカルーセル モジュール上を通過すると、左右のボタンが表示され、モジュールを離れると...

Dockerはelasticsearchイメージを起動し、ディレクトリをマウントした後にエラーを解決します

docker hub から es イメージ (バージョン 6.4.2) をダウンロードしました。詳細...

HTMLがHikvisionカメラのリアルタイム監視機能を実現

最近、同社は CCFA 関連のいくつかの作業を行う予定で、その 1 つはカメラのリアルタイム監視を再...

ElementUI el-select の過剰なデータに対する解決策についての簡単な説明

目次1. シナリオの説明2. 解決策オプションが多すぎる el-select コンポーネントの解決策...