MySQLオンラインデータベースのデータをクリーンアップする方法

MySQLオンラインデータベースのデータをクリーンアップする方法

01 シナリオ分析

今日の午後、開発仲間がオンラインでいくつかのデータレコードを削除するという要件を提案しました。データ分布をざっと見たところ、データテーブル内の2,700万件以上のレコードを削除する必要があると推定されました。データテーブル内のレコードの総数は2,800万件を超えており、削除対象のレコードがレコード総数の大部分を占めていることを意味します。2,700万件以上のデータレコードを削除すると、それらを使用するのに長い時間がかかり、オンラインビジネスに間違いなく影響します。ここでは、実際のアプリケーション ケースを次の方法で単純に再構築します。

mysql> test.tbl_a から date,count(*) を選択し、日付でグループ化します。
+----------+-----------+
| 日付 | カウント(*) |
+----------+-----------+
| | 63103 |
| 20190118 | |
| | 125916 |
| 20190120 | |
| | 129198 |
| 20190122 | |
| | 5191247 |
+----------+-----------+
 セット内の行数 (13.21 秒)

上記は再構築されたテーブルの構造です。テストデータベースのテーブル tbl_b を日付別にグループ化すると、各グループのデータ量は少なくないことがわかります。要件は、日付が 20190118 と 20190123 のレコードを削除することです。この 2 種類のレコードは 2,000 万件以上あり、テーブル内のデータの大部分を占めていることがわかります。これらを直接削除すると、オンラインビジネスは間違いなくブロックされます。

操作方法は以下の通りです。なお、以下の操作方法を適用する前提は以下のとおりです。

削除されるデータは、データ テーブルの大部分を占めます。

02 操作方法

分析により、残りのテーブル データはテーブル全体のごく一部であることがわかります。この操作は 4 つのステップに分かれています。

1. まず残りのデータを別のデータベース test1 に保存します。

テーブルtest1.tbl_b_newを作成します 
test.tbl_b から * を選択 
日付は(,,,,);

この操作には約 3 秒しかかかりません。

2. test1 データベースに同じ名前のテーブル tbl_b を作成します。その構造は、テスト データベースの tbl_b データ構造と一致します。

test.tbl_b のようなテーブル test1.tbl_b を作成します。

3. 次に、データベースの名前変更操作を使用して、テーブル test のテーブル tbl_b を test1 のテーブル tbl_b と交換します。これは、テスト データベースのテーブル内のすべてのデータをクリアすることと同じです。

テーブル名をtest.tbl_bからtest1.tbl_b_bakに変更します。
         test1.tbl_b から test.tbl_b へ、
         test1.tbl_b_bak を test1.tbl_b へコピーします。

4. 次に、最初の手順で保存した残りのデータを次のように新しいテーブルに入力します。

test.tbl_b に挿入します。test1.tbl_b_new から * を選択します。

03 結果分析

問題を複雑にしてしまったようです。直接削除にいくつかの手順を追加しました。しかし、そうではありません。この一連の操作により、数分間の節約が可能になり、オンライン ビジネスへの影響も少なくなります。その理由は次のとおりです。

  1. 残りのデータ テーブルを作成するには、create table as メソッドを使用します。このメソッドを使用すると、データ テーブル内のデータのごく一部だけを操作できます。これにより、過剰なデータのスキャンを防ぐことができます。
  2. MySQL で大きなテーブルの名前を変更する場合、rename コマンドは基になる .frm ファイルを直接変更するため、速度が非常に速くなります。

2 番目の機能は、私たちにアイデアを提供します。非常に緊急の業務では、テーブルを使用する必要がある場合、テーブルをバックアップする時間が十分にないことがよくあります。大きなテーブルのデータを削除し、関連するバックアップを作成する必要がある場合は、名前変更操作を通じてすばやく処理し、名前変更後にテーブルをバックアップする方法を見つけることができます。

上記の例では、テーブルを複製する 2 つの方法 (create table as と create table like) を使用しています。注意すべき点がいくつかあります。

create table のようなメソッドはテーブル構造を完全に複製しますが、データは挿入しません。データを個別にロードするには、insert into または load data メソッドを使用する必要があります。
create table as メソッドは、テーブル構造を部分的に複製し、データをそのまま保持します。

興味があれば、実験を行って検証してみるのも良いでしょう。

上記は、MySQLオンラインデータベースのデータをクリーニングする方法の詳細な内容です。MySQLオンラインデータベースのデータをクリーニングする方法の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL データをエクスポートする際の secure-file-priv 問題の解決方法
  • MySQLオンラインログライブラリの移行例
  • MySQLでテーブルを作成し、フィールドコメントを追加する方法
  • 大規模な MySQL テーブルに対する count() の実装を最適化しました
  • MySQLソースコマンドの使い方の紹介
  • MySQL の接続数が多すぎるエラーの原因と解決策
  • secure_file_priv nullの問題を解決する

<<:  jquery+springbootでファイルアップロード機能を実現

>>:  Docker execは複数のコマンドを実行します

推薦する

Apache での ModSecurity のインストール、有効化、および構成

ModSecurity は、Web サーバーに入るすべてのパケットをチェックする強力なパケット フィ...

シンプルなカルーセル効果を実現するJavaScript

カルーセルとは何ですか?カルーセル: モジュールまたはウィンドウで、コンピューターでマウスをクリック...

上部の固定ナビゲーションバーによって CSS アンカーの配置がブロックされる問題の解決方法

多くのウェブサイトでは、ユーザーが簡単に検索したり他のページに移動したりできるように、上部にナビゲー...

Docker のタイムゾーンの問題とデータ移行の問題

最新のソリューション: -v /usr/share/zoneinfo/Asia/Shanghai:/...

JSでよく使われるデータ処理方法

目次DOM処理配列方法要約するDOM処理DOM はドキュメントの構造化された表現を提供し、スクリプト...

docker-compose ポートと expose の違いの詳細な説明

docker-compose でコンテナ ポートを公開する方法は、ports と expose の ...

CSS トランジションを使用した円形ホバー効果のサンプルコード

この記事では ソースコードのオンラインプレビューとダウンロード今日のチュートリアルでは、円のホバー効...

Windows での自動展開に Jenkins を使用するチュートリアル図

今日は、Jenkins + powershell スクリプトを使用して、.NET CORE スクリプ...

CSSは高さを設定せずにdivを完全に中央に配置することを実現します

必要とする本文の下のdivは垂直方向に中央揃えになっていますdiv 内のテキストを垂直中央に配置する...

Ubuntu 18.04.4 に MySQL をインストールするプロセスの詳細な説明

Ubuntu 18.04.4 に MySQL をインストールするプロセスを見てみましょう。内容は次の...

Sublime Text - ブラウザのショートカットキーを設定するための推奨方法

コード効果を異なるブラウザで表示することはよくあることなので、異なるショートカットキーを使用して対応...

MySQL で 2 つのセットの交差/差/和を取得する方法

MySQL の一般的なシナリオ: 2 つのデータ セットの交差と差を取得するステップ1. 2つのコレ...

MySQLはランダムに一定数のレコードを抽出します

以前は、このような使用シナリオを処理するために rand() で直接 order していましたが、効...

html リンク タグ タイトル属性 改行 マウス ホバー プロンプト コンテンツ 改行効果

オブジェクト上にマウスを移動したときにコンテンツ(タイトル属性の内容)を折り返す方法、HTML タイ...

Nodejs で WeChat アカウント分割を実装するためのサンプルコード

会社のビジネスシナリオでは、WeChat アカウント分割機能を使用する必要があります。公式 Web ...