MySQLはデータテーブル内の既存のテーブルを分割します

MySQLはデータテーブル内の既存のテーブルを分割します

既存のテーブルにパーティション テーブルを作成し、データを新しいテーブルに移行します。テーブルは時間別にパーティション分割できます。ただし、このテーブルはリアルタイムで更新されず、1 日に 1 回の挿入操作が行われます。
時間はたっぷりありますが、サーバー上には他のアプリケーションもあるため、より小さなリソースを使用することが主なアプローチです。

操作方法

@1 ALTER TABLE を使用して、テーブルをパーティション テーブルに変更できます。この操作により、パーティション テーブルが作成され、データが自動的にコピーされてから、元のテーブルが削除されます。
サーバーのリソース消費が比較的大きいと思われます。

同様の操作

ALTER TABLE tbl_rtdata PARTITION BY RANGE (Month(fld_date))
(   
パーティション p_Apr 値が (TO_DAYS('2012-05-01')) より小さい
パーティション p_May の値は (TO_DAYS('2012-06-01')) より小さい 
PARTITION p_Dec 値が MAXVALUE 未満です);

@2 元のテーブルと同じ新しいパーティション テーブルを作成し、元のテーブルからデータをエクスポートして、新しいテーブルにインポートします。
(元のテーブルの主キーは id のみで、パーティション フィールドは stsdate です。ここで、主キーを id、stsdate の共同主キーに変更する必要があります。パーティション テーブルでは、パーティション フィールドが主キーまたは主キーの一部である必要があります。)

操作プロセス

2番目のオプションを採用します。まずパーティション テーブルを作成し、次に元のテーブル データをエクスポートし、新しいテーブル名を元のテーブル名に変更して挿入し、最後に通常のインデックスを作成します。

パーティションテーブルを作成する

テーブル `apdailysts_p` を作成します (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `ap_id` INT(11) NULLではない、
  `mac` VARCHAR(17) NOT NULL、
  `liveinfo` LONGTEXT NULLではありません。
  `livetime` INT(11) NOT NULL,
  `stsdate` 日付がNULLではありません。
  `lastmodified` DATETIME NULLではありません、
   主キー (`id`, `stsdate`)
) 
範囲列によるパーティション(stsdate) (
    パーティション p0 の値は ('2016-06-01') より小さいです。
    パーティション p1 の値は ('2016-07-01') より小さいです。
    パーティション p2 の値が ('2016-08-01') より小さい。
    パーティション p3 の値が ('2016-09-01') より小さい。
    パーティション p4 の値が ('2016-10-01') より小さい。
    パーティション p5 の値は ('2016-11-01') より小さいです。
    パーティション p6 の値は ('2016-12-01') より小さいです。
    パーティション p7 の値は ('2017-01-01') より小さいです。
    パーティション p8 の値は ('2017-02-01') より小さいです。
    パーティション p9 の値は ('2017-03-01') より小さいです。
    パーティション p10 の値が ('2017-05-01') より小さい
    パーティション p11 の値は ('2017-06-01') より小さいです。
    パーティション p12 の値が ('2017-07-01') より小さい。
    パーティション p13 の値は ('2017-08-01') より小さいです。
    パーティション p14 の値が ('2017-09-01') より小さい。
    パーティション p15 の値が MAXVALUE 未満です
);

データのエクスポート

mysqldump -u データベース名 -p --no-create-info データベース名 apdailysts > apdailysts.sql

テーブル名を変更し、データをインポートし (200 万件のデータをインポートするのに 10 分かかりました。8 GB 強です)、テストして問題がなければ、元のテーブルを削除します。

テストは正常に動作しており、2日間観察します。 。

– 10.16
2日間の観察で、ページのクエリ速度が開けない状態から数秒で開ける状態に改善され、この最適化は効果的であることがわかりました。

これで、MySQL で既存のテーブルをパーティション分割する方法に関するこの記事は終了です。MySQL で既存のテーブルをパーティション分割する方法についての詳細は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLパーティションテーブルは月別に分類されています
  • MySQL パーティション テーブルに関するパフォーマンス バグ
  • Mysql の一時テーブルとパーティションテーブルの違いの詳細な説明
  • MySQLパーティションテーブルの詳細な説明
  • MySQL ベストプラクティス: パーティションテーブルの基本タイプ
  • MySQL パーティション テーブルのパーティション キーが主キーの一部である必要があるのはなぜですか?

<<:  Firebug ツールを使用して iPad でページをデバッグする

>>:  HTMLで細い線のテーブルを作成する簡単な例

推薦する

MySQL でインデックス構造として B+ ツリーを使用する利点は何ですか?

序文MySQL では、Innodb と MyIsam の両方がインデックス構造として B+ ツリーを...

Vue3.0 + TypeScript + Vite初体験の詳しい説明

目次プロジェクトの作成プロジェクト構造メイン.jsアプリ.vue:設定コンポジションAPI参照反応的...

MySQL 5.7 をインストールした後にコマンドライン ウィンドウを開くとクラッシュする問題の解決方法

序文最近、MySQL 5.7 をインストールしましたが、問題が見つかりました。コマンド ライン ウィ...

Vue ソング プログレス バーのサンプル コード

なお、これはvue-cliで作成したプロジェクトではありません。vue.jsを参照して記述したHTM...

uniapp 要素ノードスタイルの動的変更の詳細な説明

目次1. スタイル属性をバインドして変更するhtml:対応するjs:達成された効果:次に、refを使...

デプロイから基本操作までDocker Swarm

Docker SwarmについてDocker Swarm は次の 2 つの部分で構成されます。 D...

魔法のMySQLデッドロックトラブルシューティング記録

背景MySQL のデッドロックについて言えば、私は以前 MySQL のロックに関する基本的な紹介記事...

CentOS 7.4 にソースコードから MySQL 8.0 をインストールするための詳細なチュートリアル

目次1. 環境2. 準備3. MySQL 8.0.11をインストールするMySQL 8 の公式バージ...

MySQL でタイムゾーンを表示および変更する方法

今日、プログラムが間違った時刻を挿入し、フィールドがデフォルト値 CURRENT_TIMESTAMP...

実稼働環境でのNginx高可用性ソリューションの実装プロセスの分析

準備: 192.168.16.128 192.168.16.129 2 台の仮想マシン。 Nginx...

Linux で利用可能なネットワーク インターフェイスを表示する方法

序文Linux システムをインストールした後の最も一般的なタスクは、ネットワーク構成です。もちろん、...

MySQL 文字セットの概要

目次文字セット比較ルール4つのレベルの文字セットと比較規則3つのシステム変数このノートは主にMySQ...

HTML テーブルタグチュートリアル (21): 行の境界線の色属性 BORDERCOLOR

テーブルを美しくするために、行ごとに異なる境界線の色を設定できます。基本的な構文<TR 境界線...

JSで画面録画機能を作成する

OBS studioかっこいいですが、 JavaScriptもっとかっこいいです。では、 JavaS...

MySQL 5.7.18 zip バージョンのインストール チュートリアル

MySQL の mysql 5.7.18 zip バージョンは、クリックして次のステップをクリックし...