MySQL パーティション テーブルの基本入門チュートリアル

MySQL パーティション テーブルの基本入門チュートリアル

序文

最近のプロジェクトでは、大量のデータを保存する必要があり、このデータには有効期限があります。クエリの効率を向上させ、期限切れのデータを迅速に削除するために、MySQL パーティショニング メカニズムを選択しました。データを時間ごとに分割します。

パーティションタイプ

  • 範囲パーティション分割: 最も一般的に使用され、指定された連続間隔に属する列の値に基づいて複数の行をパーティションに割り当てます。最も一般的なものは、時間フィールドに基づいています。パーティション ベースの列は、整数であることが望ましいです。日付型の場合は、関数を使用して整数に変換できます。
  • リスト パーティション: リスト パーティションは RANGE パーティションに似ていますが、違いは、リストが列挙値リストのコレクションであるのに対し、RANGE は連続した間隔値のコレクションである点です。
  • ハッシュ パーティション分割: 指定されたパーティション数に基づいて、データが異なるパーティションに割り当てられます。ハッシュ パーティション分割では、整数に対してのみハッシュ操作を実行できます。整数以外のフィールドは、式を通じてのみ整数に変換できます。
  • キー パーティション: KEY パーティションは HASH パーティションに似ていますが、次の違いがあります。
    • KEY パーティションでは複数の列が許可されますが、HASH パーティションでは 1 つの列のみが許可されます。
    • 主キーまたは一意キーがある場合、キー内のパーティション列は未指定のままにすることができます。デフォルトは主キーまたは一意キーです。そうでない場合は、列を明示的に指定する必要があります。
    • KEY パーティション オブジェクトは、列に基づく式ではなく、列である必要があります。
    • KEY パーティション分割と HASH パーティション分割のアルゴリズムは異なります。PARTITION BY HASH (expr) では、MOD 値は expr によって返される値ですが、PARTITION BY KEY (column_list) では、列の MD5 値に基づきます。

パーティションコマンド

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

テーブル `access_log` を作成します (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `access_time` 日時 NOT NULL、
 主キー (`id`,`access_time`)
) エンジン=InnoDB デフォルト文字セット=utf8
/*!50100 範囲によるパーティション分割 (to_days(access_time))
(パーティション p1 の値は (to_days(20190101) 未満) エンジン = InnoDB、
 パーティション p2 の値は (to_days(20190102)) 未満です エンジン = InnoDB、
 パーティション p3 の値が (to_days(20190103)) より小さい エンジン = InnoDB) */;

作成後、各パーティションがibdファイルに対応していることがわかります。


パーティションテーブル

新しいパーティションを追加する

access_logテーブルを変更してパーティションを追加(
 パーティションp4の値が(to_days('20190105'))より小さい
);

パーティションの削除

access_logテーブルを変更し、パーティションp1を削除します。

パーティションを分割する

access_logテーブルを変更し、パーティションp4を(
 -> パーティションs0の値が(to_days('20190104')より小さい)、
 -> パーティション s1 の値が (to_days('20190105') より小さい)
 -> );

パーティションを結合する

access_logテーブルを変更し、パーティションs0、s1を( 
 パーティションp4の値が(to_days('20190105'))より小さい 
);

予防

  • MySQL パーティションに主キーまたは一意キーがある場合は、パーティション列をそれに含める必要があります (そうでない場合は、主キーまたは一意キーを決定するためにすべてのパーティションをスキャンする必要があります)
  • パーティションフィールドはNULLにできません。そうしないとパーティション範囲が決定されないため、NOT NULLを使用するようにしてください。
  • パーティションの最大数は1024を超えることはできません
  • 外部キーはサポートされていません
  • データテーブルの整数列のみをパーティション化できます。または、パーティション関数を使用してデータ列を整数列に変換できます。
  • パーティションテーブルは自動増分列には影響しません

よくある質問

  • PRIMARY KEY には、テーブルのパーティション関数内のすべての列が含まれている必要があります。これにより、主キーが一意であるかどうかの判断を単一のパーティション内で完了できます。そうでない場合は、すべてのパーティションにわたって完了する必要があります。
  • MAXVALUE は最後のパーティション定義でのみ使用できます。RANGE テーブルは、パーティション分割後に MAXVALUE パーティションを持つことはできません。そうしないと、パーティションを追加できません。または、単にパーティションを再分割することもできます。
テーブル access_log のパーティションを範囲 (to_days(access_time)) で変更します。
パーティションp1の値が(to_days('20191202'))未満である、 
パーティションp2の値が(to_days('20191203'))未満である 
 パーティション po 値が (maxvalue) より小さい
)
  • テーブルには値 737425 のパーティションがありません。パーティション範囲にすべての可能なレコード値が含まれていないためです。

参照する

  • MySQL · ベストプラクティス · パーティションテーブルの基本タイプ
  • インターネット企業はなぜ MySQL パーティション テーブルを使用しないのでしょうか?
  • エラー 1481 (HY000) を解決する方法: MAXVALUE は最後のパーティション定義でのみ使用できます

要約する

これで、MySQL パーティション テーブルの基本的な導入チュートリアルに関するこの記事は終了です。MySQL パーティション テーブルに関するより詳しい内容については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL パーティション テーブルに関するパフォーマンス バグ
  • MySQL テーブルパーティションの使用法と基本原理の詳細な説明
  • MySQL シャーディング入門ガイド
  • MySql テーブル、データベース、シャーディング、パーティショニングの知識の詳細な説明
  • MySQLパーティションテーブルの詳細な説明
  • MySQL ベストプラクティス: パーティションテーブルの基本タイプ
  • MySQL パーティションテーブルのベストプラクティスガイド
  • MySQL パーティションテーブルの正しい使用方法
  • MySQL パーティションテーブルの制限と制約の詳細な説明
  • MySQLはデータテーブル内の既存のテーブルを分割します

<<:  JavaScript 配列メソッド - 体系的な概要と詳細な説明

>>:  Alibaba Cloud Serverにプログラムをデプロイし、ドメイン名を使用して直接アクセスする方法の詳細な説明

推薦する

CSS3 はドラッグ可能なルービックキューブの 3D 効果を実現します

主に使用される知識ポイント: •css3 3D変換 •ネイティブjsマウスドラッグイベント•表示:グ...

HTML 5 ワーキングドラフトの謎を解く

World Wide Web Consortium (W3C) は、HTML 5 仕様のドラフトをリ...

MySQL 学習チュートリアル クラスター化インデックス

クラスタリングは、実際には InnoDB データベース エンジンに関連しています。したがって、インデ...

Mysqlトランザクション処理の詳細な説明

1. MySQLのトランザクションの概念MySQL トランザクションは主に、操作量が多く複雑度の高い...

Dockerはポートを介してコンテナに接続します

Dockerコンテナ接続1. ネットワークポートマッピングPythonアプリケーション用のコンテナを...

HTML 挿入画像の例 (HTML 追加画像)

HTML に画像を挿入するには、画像を表示するための HTML タグが必要です。これは、img タ...

CSS で平均レイアウトを実現するために負のマージンを使用する例

均等に分散されたレイアウトの場合、通常はネガティブ マージン方式を使用します。次の図は平均的なレイア...

最新の仮想マシン VMware 14 インストール チュートリアル

まず、VMware 14のアクティベーションコードをお渡ししますFF31K-AHZD1-H8ETZ-...

Vue.js の watch メソッドと computed メソッドの違いの詳細な例

目次序文導入1. 作用機序2. 自然から3. 時計と計算の比較4. メソッドはデータロジックの関係を...

HTML初心者や初級者向けの提案。専門家は無視してかまいません。

感想:私はバックエンド開発者です。静的 (HTML) ページを取得すると、ページ構造と命名規則が極端...

ファイルの種類を検出するJavaScriptメソッド

目次1. 画像のバイナリデータを表示する方法2. 絵の種類の見分け方3. 画像の種類を検出する方法3...

Nginx でアクセス頻度、ダウンロード速度、同時接続数を制限する方法

1. アクセス頻度、同時接続、ダウンロード速度を制限するために使用されるモジュールと命令の概要ngx...

JavaScript カスタム カレンダー効果

この記事では、JavaScriptカスタムカレンダーエフェクトの具体的なコードを参考までに紹介します...

Centos6 で 20TB を超えるディスクをパーティション分割してフォーマットするためのサンプル コード

1. サーバー環境の構成: 1. ディスクパーティションを確認します。最近、あるプロジェクト内のサー...

反応ルーティングでパラメータを渡すいくつかの方法についての簡単な説明

最初のパラメータ渡し方法は、動的ルーティングパラメータ渡しです。リンクのパス属性を設定することで、ル...