序文: パーティショニングはテーブル設計パターンです。一般的に、テーブル パーティショニングとは、条件に基づいて大きなテーブルを複数の小さなテーブルに分割することです。ただし、アプリケーションにとっては、パーティション化されたテーブルはパーティション化されていないテーブルと同じです。つまり、パーティショニングはアプリケーションに対して透過的であり、データベースによるデータの再編成にすぎません。この記事では、MySQL のパーティション テーブルとその使用シナリオを紹介します。困っている方は参考にしてください。お役に立てれば幸いです。 1. パーティションの目的と種類 MySQL でテーブルを作成するときに、PARTITION BY 句を使用して各パーティションに格納されるデータを定義できます。クエリを実行すると、オプティマイザーはパーティション定義に基づいて必要なデータがないパーティションを除外します。そのため、クエリではすべてのパーティションをスキャンする必要はなく、必要なデータが含まれているパーティションのみを検索すれば済みます。 パーティショニングのもう 1 つの目的は、より粗い粒度で異なるテーブルにデータを保存することです。こうすることで、関連するデータをまとめて保存することができます。また、パーティション全体のデータを一括で削除したい場合にも便利です。 以下では、一般的な 4 つのパーティション タイプについて簡単に説明します。
上記の 4 つのパーティション タイプのうち、RANGE パーティションが最もよく使用されます。 RANGE パーティションの特徴は、複数のパーティションの範囲が連続している必要があり、重複できないことです。デフォルトでは、VALUES LESS THAN 属性が使用され、つまり、各パーティションには指定された値が含まれません。 2. パーティション操作の例 このセクションでは、RANGE パーティション分割を例に、パーティション テーブルに関連する操作について説明します。 # パーティションテーブルを作成するmysql> CREATE TABLE `tr` ( -> `id` INT, -> `名前` VARCHAR(50), -> `購入` 日付 -> ) エンジン=InnoDB デフォルト文字セット=utf8 -> 範囲によるパーティション(年(購入))( -> パーティション p0 の値が (1990) 未満の場合、 -> パーティション p1 の値が (1995) 未満の場合、 -> パーティション p2 の値が (2000) 未満である、 -> パーティション p3 の値が (2005) 未満です。 -> パーティション p4 の値が (2010) 未満です。 -> パーティション p5 の値が (2015) 未満 -> ); クエリは正常、影響を受けた行は 0 行 (0.28 秒) # データを挿入mysql> INSERT INTO `tr` VALUES -> (1, 'デスクオーガナイザー', '2003-10-15'), -> (2, '目覚まし時計', '1997-11-05'), -> (3, '椅子', '2009-03-10'), -> (4, '本棚', '1989-01-10'), -> (5, 'エクササイズバイク', '2014-05-09'), -> (6, 'ソファ', '1987-06-05'), -> (7, 'エスプレッソメーカー', '2011-11-22'), -> (8, '水族館', '1992-08-04'), -> (9, '勉強机', '2006-09-16'), -> (10, '溶岩ランプ', '1998-12-25'); クエリは正常、10 行が影響を受けました (0.03 秒) 記録: 10 重複: 0 警告: 0 作成後、各パーティションが ibd ファイルに対応していることがわかります。上記の作成ステートメントは理解しやすいです。このパーティション テーブルでは、DATE 日付の年が YEAR 関数によって抽出され、整数に変換されます。1990 未満の年はパーティション p0 に格納され、1995 未満の年はパーティション p1 に格納されます。各パーティションは最低から最高の順に定義されていることに注意してください。挿入されたデータに対応するパーティションが見つからないためにエラーが報告されるのを防ぐには、時間内に新しいパーティションを作成する必要があります。以下に、パーティションのメンテナンスに関連するその他の操作を示します。 # パーティションのデータを表示します。mysql> SELECT * FROM tr PARTITION (p2); +------+-------------+-------------+ | ID | 名前 | 購入 | +------+-------------+-------------+ | 2 | 目覚まし時計 | 1997-11-05 | | 10 | 溶岩ランプ | 1998-12-25 | +------+-------------+-------------+ セット内の 2 行 (0.00 秒) # パーティションを追加mysql> alter table tr addpartition( -> パーティション p6 の値が (2020) 未満 -> ); クエリは正常、影響を受けた行は 0 行 (0.06 秒) レコード: 0 重複: 0 警告: 0 # パーティションを分割mysql> alter table tr reorganize partition p5 into( -> パーティションs0の値が(2012)より小さい、 -> パーティション s1 の値が(2015) より小さい -> ); クエリは正常、影響を受けた行は 0 行 (0.26 秒) レコード: 0 重複: 0 警告: 0 # パーティションをマージmysql> alter table tr reorganize partition s0,s1 into ( -> パーティションp5の値が小さい(2015) -> ); クエリは正常、影響を受けた行は 0 行 (0.12 秒) レコード: 0 重複: 0 警告: 0 # パーティションのデータをクリアします。mysql> alter table tr truncate partition p0; クエリは正常、影響を受けた行は 0 行 (0.11 秒) # パーティションを削除します。mysql> alter table tr drop part p1; クエリは正常、影響を受けた行は 0 行 (0.06 秒) レコード: 0 重複: 0 警告: 0 # 交換パーティション # まず、パーティションテーブルと同じ構造の交換テーブルを作成します。mysql> CREATE TABLE `tr_archive` ( -> `id` INT, -> `名前` VARCHAR(50), -> `購入` 日付 -> ) ENGINE=InnoDB デフォルト文字セット=utf8; クエリは正常、影響を受けた行は 0 行 (0.28 秒) # 交換パーティションを実行します。 mysql> alter table tr exchange PARTITION p2 with table tr_archive; クエリは正常、影響を受けた行は 0 行 (0.13 秒) 3. パーティションの考慮事項と適用可能なシナリオ 実際、パーティション テーブルを使用する際には多くの制限や注意事項があります。公式ドキュメントを参照すると、いくつかのポイントが次のように簡単にまとめられています。
上記の紹介から、パーティション テーブルが一部のログ テーブルに適していることがわかります。このタイプのテーブルは、大量のデータ、コールド データとホット データの区別、および時間ディメンションに従ったデータ アーカイブを特徴としています。このタイプのテーブルは、パーティション テーブルの使用に適しています。パーティション テーブルは個別のパーティションを維持できるため、データのアーカイブに便利です。 4. パーティションテーブルがあまり使われない理由 私たちのプロジェクト開発では、パーティション テーブルはほとんど使用されません。その理由はいくつかあります。
要約: この記事では、MySQL のパーティショニングについて詳しく紹介します。パーティション テーブルを使用する場合は、事前に計画を立て、初期化時にパーティション テーブルを作成し、メンテナンス プランを作成することをお勧めします。適切に使用すると非常に便利です。特に、履歴データのアーカイブが必要なテーブルの場合、パーティション テーブルを使用すると、アーカイブがより便利になります。もちろん、パーティション テーブルに関するコンテンツは他にもたくさんあります。興味のある学生は、多数の例が含まれている公式ドキュメントを参照してください。 上記はMySQLパーティションテーブルの詳細な説明です。MySQLパーティションテーブルの詳細については、123WORDPRESS.COMの他の関連記事をご覧ください。 以下もご興味があるかもしれません:
|
<<: IDEA 2020 で Tomcat サーバーを構成するための詳細な手順
この記事の例では、スネークゲームを実装するためのjsの具体的なコードを参考までに共有しています。具体...
この記事では主にTomcatプロセスを記録し、TCP接続が多すぎることによるCPU使用率の過剰のトラ...
この記事では、Webページの画像の回転を実現するためのjsの具体的なコードを参考までに共有します。具...
レコード ロックは、単一のインデックス レコードをロックします。レコード ロックは常にインデックスを...
目次問題の説明MySQLオンラインDDLで列を追加する従来の方法01 コピー方法02 インプレースメ...
目次Docker イメージ鏡とは何ですか? Dockerイメージの読み込み原理コミットミラーDock...
序文: MySQL では、ビューはおそらく最も一般的に使用されるデータベース オブジェクトの 1 つ...
目次基本的な指示1. 現在のマシンのコンテナステータスを確認する2. イメージをダウンロードまたは取...
イベントの説明onactivate: オブジェクトがアクティブ要素として設定されたときに発生します。...
これは多くの人が遭遇した問題だと思います。実際、Web ページから FLASH をダウンロードして修...
かつて、サイコロを振るゲームについて話しました。その時は、steps 属性 + スプライト画像を使用...
目次導入ミラーリポジトリログイン引く押す検索ローカル画像管理画像rmiタグ建てる歴史保存負荷輸入コン...
目次1. デジタル列挙2. 文字列の列挙3. 逆マッピング4. 異種列挙5. 定数列挙6. 列挙メン...
1. インデックスの役割一般的に言えば、インデックスは本の目次に相当します。条件に基づいてクエリを実...