MySQL交換パーティションの詳細な例 序文 exchange パーティションを紹介する前に、まず mysql パーティションについて理解しましょう。 データベースのパーティション分割には、水平パーティション分割と垂直パーティション分割の 2 種類があります。 MySQL は現在垂直パーティショニングをサポートしていないため、以下では水平パーティショニングについて説明します。水平分割とは、テーブルを行ごとに分割することを意味します。たとえば、時間ごとにパーティションを分けたり、年ごとに 1 つのパーティションを分けたりします。 MySQL では、パーティションは交換可能であり、パーティション テーブルのパーティション内のデータは、通常のテーブル内のデータと交換できます。 スワップパーティションの実装 1. スワップパーティションの構文 テーブル pt を変更し、パーティション p をテーブル nt と交換します。 説明する: パーティション テーブル pt のパーティション p と通常のテーブル nt のデータを交換します。 交換の前提条件:
2. 実験的なスワップパーティション (1)パーティションテーブルを作成し、データを挿入する # パーティションテーブルを作成する テーブルeを作成( id INT NOT NULL、 fname VARCHAR(30)、 lname VARCHAR(30) ) 範囲によるパーティション分割 (id) ( パーティション p0 値が (50) 未満 パーティション p1 値が (100) 未満 パーティション p2 の値が (150) 未満である、 パーティション p3 の値が (MAXVALUE) 未満です ); # パーティションテーブルに複数のレコードを挿入します e INSERT INTO e VALUES (1669年、「ジム」、「スミス」)、 (337、「メアリー」、「ジョーンズ」)、 (16、「フランク」、「ホワイト」) (2005年、「リンダ」、「ブラック」) (2)パーティションテーブルeと同じ構造の共通テーブルe2を作成する # テーブルe2を作成する mysql> e のようなテーブル e2 を作成します。 # テーブル e2 のパーティションを削除して通常のテーブルにします。mysql> alter table e2 remove partitioning; (3)テーブルeの各パーティションに何行あるか確認する mysql> PARTITION_NAME、TABLE_ROWSを選択 -> INFORMATION_SCHEMA.PARTITIONS から -> WHERE TABLE_NAME = 'e'; +----------------+------------+ | パーティション名 | テーブル行 | +----------------+------------+ | p0 | 1 | | p1 | 0 | | p2 | 0 | | p3 | 3 | +----------------+------------+ セット内の 4 行 (0.00 秒) (4)テーブルeのパーティションp0を通常のテーブルe2と交換する mysql> テーブル e を変更し、パーティション p0 をテーブル e2 と交換します。 (5)結果を見る # テーブル e のパーティション P0 のデータは消えましたmysql> SELECT PARTITION_NAME, TABLE_ROWS -> INFORMATION_SCHEMA.PARTITIONS から -> WHERE TABLE_NAME = 'e'; +----------------+------------+ | パーティション名 | テーブル行 | +----------------+------------+ | p0 | 0 | | p1 | 0 | | p2 | 0 | | p3 | 3 | +----------------+------------+ セット内の 4 行 (0.00 秒) # テーブル e2 には、テーブル emysql のパーティション p0 からのレコードがあります。> SELECT * FROM e2; +----+-------+-------+ | id | fname | lname | +----+-------+-------+ | 16 | フランク | ホワイト | +----+-------+-------+ セット内の 1 行 (0.00 秒) テーブル e のパーティション p0 のデータがテーブル e2 に移動されていることがわかります。 上記の例では、パーティションを通常の空のテーブルと交換します。これは、パーティションのデータを移動するのと同じです。これは通常、データのアーカイブで使用されます。 同様に、交換パーティションはパーティションと空でない通常のテーブル間で交換することもでき、通常のテーブル内のデータは指定されたパーティションに移動され、指定されたパーティション内のデータは通常のテーブルに移動されます。次のようにします。 (6)パーティションテーブルeのp0に別のデータを追加する # パーティション p0 のレコードをテーブル e に追加します。mysql> INSERT INTO e VALUES (41, "Michael", "Green"); クエリは正常、1 行が影響を受けました (0.05 秒) # 挿入されたデータがパーティションp0に実際に保存されていることを確認します mysql> PARTITION_NAME、TABLE_ROWS を選択 -> INFORMATION_SCHEMA.PARTITIONS から -> WHERE TABLE_NAME = 'e'; +----------------+------------+ | パーティション名 | テーブル行 | +----------------+------------+ | p0 | 1 | | p1 | 0 | | p2 | 0 | | p3 | 3 | +----------------+------------+ セット内の 4 行 (0.00 秒) (7)スワップパーティションを実行する mysql> テーブル e を変更し、パーティション p0 をテーブル e2 と交換します。 クエリは正常、影響を受けた行は 0 行 (0.28 秒) (8)結果を見る # 以前は、テーブル e の p0 がテーブル e2 のデータの一部と交換されていましたが、現在はテーブル e に戻っています。 mysql> SELECT * FROM e; +------+-------+-------+ | id | fname | lname | +------+-------+-------+ | 16 | フランク | ホワイト | | 1669 | ジム | スミス | | 337 | メアリー | ジョーンズ | | 2005 | リンダ | ブラック | +------+-------+-------+ セット内の 4 行 (0.00 秒) mysql> e2 から * を選択; +----+---------+-------+ | id | fname | lname | +----+---------+-------+ | 41 | マイケル | グリーン | +----+---------+-------+ セット内の 1 行 (0.00 秒) このことから、テーブル e の p0 とテーブル e2 のデータが入れ替わっていることがわかります。このシナリオは、共通テーブルからパーティション テーブル内のパーティションにデータを移動する場合に使用できます。 ただし、注意すべき点が 1 つあります。 共通テーブルのデータが交換するパーティションの範囲内にない場合、パーティションを交換するための上記の構文は正常に実行できません。操作方法は下記をご参照ください。 (9)テーブルeのp0範囲を超えるデータを通常のテーブルe2に挿入し、上記の交換文を実行する。 mysql> INSERT INTO e2 VALUES (51, "Ellen", "McDonald"); クエリは正常、1 行が影響を受けました (0.08 秒) mysql> テーブル e を変更し、パーティション p0 をテーブル e2 と交換します。 エラー 1707 (HY000): パーティションと一致しない行が見つかりました MySQL 5.6 ではこの問題を解決できませんが、MySQL 5.7.5 では上記のエラーを解決するために WITHOUT VALIDATION オプションが追加されました。操作は以下のとおりです。 mysql> ALTER TABLE e を VALIDATION なしで TABLE e2 と交換する PARTITION p0; クエリは正常、影響を受けた行は 0 行 (0.02 秒) 結果を表示: # ID 51 のデータはテーブル e の p0 にも保存されます。mysql> select * from e partition(p0); +------+---------+----------+ | id | fname | lname | +------+---------+----------+ | 41 | マイケル | グリーン | | 51 | エレン | マクドナルド | +------+---------+----------+ mysql> e2 から * を選択; +----+---------+-------+ | id | fname | lname | +----+---------+-------+ | 16 | フランク | ホワイト | +----+---------+-------+ セット内の 1 行 (0.00 秒) 要約する 上記の実際の操作を通じて、MySQL 交換パーティション機能には 2 つの適用可能なシナリオがあることがわかりました。 パーティション テーブルのパーティションを空の通常テーブルと交換して、パーティション テーブルのパーティションのデータを移動します。 読んでいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: Vmwareでディスクを追加する方法:ディスクを拡張する
1. Howdyをインストール: howdyプロジェクトアドレス sudo add-apt-repo...
序文MySQL の権限テーブルは、データベースの起動時にメモリにロードされます。ユーザーが ID 認...
目次デコレータパターンの紹介TypeScript のデコレータデコレータの使用デコレーターファクトリ...
ごみ箱機能をオンにすると、削除されたファイルの元のデータをタイムアウトなしで復元できるため、誤って削...
目次序文背景大きな推測パターンを見つける構造とスタイルコンポーネントの実装パラメータキーボードの種類...
スプレッド演算子を使用すると、式をある時点で展開できます。スプレッド演算子は、複数のパラメーター (...
01. コマンドの概要Linux には充実したヘルプ マニュアルが用意されています。コマンドのパラメ...
導入今日は Python でデータベースに接続する方法を学んだので、MySQL データベースをインス...
目次1. Linuxのビット数を確認する2. JDKをダウンロードする3. JDKをインストールする...
この記事では、参考までにvueキャンバスのタイムライン描画の具体的なコードを紹介します。具体的な内容...
1. システムに必要な libaio ソフトウェアがインストールされていることを確認します。インスト...
入力ボックスには、コンテンツを入力するときに常に入力履歴が表示されます。これを無効にする現在の方法は...
1. インストールターミネーターの最大の特徴は、1つのウィンドウで複数のターミナルを開くことができる...
この記事では、Linux 環境の Apache サーバーでセカンダリ ドメイン名を構成する方法につい...
1. MySQLをシャットダウンする [root@localhost /]# サービスmysqldを...