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サーバーが消えたエラーの解決策

PHP で MySQL サーバーが消えた問題1. 背景以前、Codeigniter でコンソール コ...

Vueルーティング相対パスジャンプメソッド

目次Vueルーティング相対パスジャンプ1. 属性の追加2.router.resolveメソッドVue...

JS でオブジェクト プロパティを簡単にトラバースするいくつかの方法

目次1. 自己列挙可能なプロパティ2. Object.values()はプロパティ値を返します3. ...

MySQLトリガーの使用

トリガーにより、ステートメントの実行前または実行後に他の SQL コードを実行できます。トリガーは、...

Windows ベースの MySQL 8.0.12 のインストール

このチュートリアルは Windows システムにのみ適用されます。インストールしたがまだインストール...

フォームデータを取得するための Node.js メソッドの 3 つの例

序文Nodejs はサーバーサイド言語です。開発中、登録やログインなどでは、判断のためにフォームを通...

VMware仮想マシンブリッジによるインターネット相互接続を実現する方法

VMware をインストールして新しい仮想マシンを作成したら、オプション バーの [編集] - [仮...

JavaScript で最も高速なループはどれですか?

どの for ループまたは反復子がニーズに適しているかを知ることで、アプリケーションのパフォーマンス...

DockerHubイメージリポジトリの使い方の詳しい説明

これまで使用していたイメージはすべて DockerHub パブリック リポジトリから取得していました...

Dockerコンテナオーケストレーション実装プロセス分析

実際の開発環境や本番環境では、コンテナを独立して実行することはあまりなく、複数のコンテナを一緒に実行...

CentOS 7 で Python を 3.6.6 にアップグレードした後に発生する yum エラー問題の解決方法の概要

最近、テスト サーバーのオペレーティング システムを Cent0S 7.5 にアップグレードし、Py...

HTML シンプルショッピング数量アプレット

この記事では、参考までにシンプルなHTMLショッピング数量アプレットを紹介します。具体的な内容は次の...

初心者向けに Docker に Jenkins をインストールする方法を詳しく説明したチュートリアル

Jenkins はオープンソース ソフトウェア プロジェクトです。Java をベースに開発された継続...

Alibaba Cloud ECS centos6.8 に MySql5.7 をインストールして設定するチュートリアル

Alibaba Cloud yum コマンドでのデフォルトの MySQL バージョンは 5.17**...