序文: パーティショニングはテーブル設計パターンです。一般的に、テーブル パーティショニングとは、条件に基づいて大きなテーブルを複数の小さなテーブルに分割することです。ただし、アプリケーションにとっては、パーティション化されたテーブルはパーティション化されていないテーブルと同じです。つまり、パーティショニングはアプリケーションに対して透過的であり、データベースによるデータの再編成にすぎません。この記事では、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 のパーティショニングについて詳しく紹介します。パーティション テーブルを使用する場合は、事前に計画を立て、初期化時にパーティション テーブルを作成し、メンテナンス プランを作成することをお勧めします。適切に使用すると非常に便利です。特に、履歴データのアーカイブが必要なテーブルの場合、パーティション テーブルを使用すると、アーカイブがより便利になります。もちろん、パーティション テーブルに関するコンテンツは他にもたくさんあります。興味のある学生は、多数の例が含まれている公式ドキュメントを参照してください。 参照: https://dev.mysql.com/doc/refman/5.7/en/partitioning.html https://www.jb51.net/article/187690.htm さて、これで MySQL パーティション テーブルのベスト プラクティス ガイドに関するこの記事は終了です。MySQL パーティション テーブルのより関連性の高いプラクティスについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Vue ルーティングフォールバックに最適なソリューション (vue-route-manager)
>>: Linux のネイティブ openjdk をアンインストールして sun jdk をインストールする方法
1. スタイルシートの先頭にコメント ブロックを追加して、スタイルシートの作成日、作成者、タグ、その...
画像をダウンロード docker プル openjdkデータボリュームの作成java_appデータボ...
パスワードモードPDO::__construct(): サーバーがクライアントに不明な認証方法を要求...
XML スキーマは、DTD に代わる XML ベースのものです。 XML スキーマは、DTD に代わ...
注意: docker-compose.yml ファイルを書き込むときは、すべてのコロン (:) とダ...
この記事の例では、ログインページを実装するためのlayuiの具体的なコードを参考までに共有しています...
1. left(name,4)は左の4文字をインターセプトしますリスト: SELECT LEFT(2...
目次スプレッド演算子を使用してプロパティを渡すのは避けてください関数パラメータをオブジェクトにカプセ...
この例では、デバッグ用の MySQL データベースをダウンロードしてインストールする必要があります。...
1.html部分コードをコピーコードは次のとおりです。 <!DOCTYPE html> ...
1. CSS3の三角形は特殊効果でズームし続けます11.1 画像プレビュー 11.2 index.h...
SeLinuxを無効にするsetenforce 0永久に閉店: vi /etc/selinux/c...
MySQL マルチテーブルクエリ (直積原理)まず、データが使用するテーブルを決定します。デカルト...
序文この記事では、Vue コンポーネントがどのように解析され、レンダリングされるかを説明します。 V...
参考までに、JavaScriptのオブジェクトとメソッドを使用して実装されたWebピンボールゲームを...