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にプログラムをデプロイし、ドメイン名を使用して直接アクセスする方法の詳細な説明

推薦する

Windowsにmysql5.7をインストールする方法

まずmysqlの圧縮バージョンをダウンロードします。公式ダウンロードアドレスは123WORDPRES...

JavaScript実行メカニズムの詳細な紹介

目次1. プロセスとスレッドの概念2. ブラウザの原則3. 同期と非同期4. 実行スタックとタスクキ...

SQL ストアド プロシージャの取得、データ取得、プロセス分析

この記事は主に、SQL のストアド プロシージャから返されたデータを取得するプロセスの分析を紹介しま...

MySQL データ分析ストレージエンジンの例の説明

目次1. 事例紹介2. システムのデフォルトのストレージエンジンとデフォルトの文字セットを表示する3...

HTML 選択オプション デフォルトの選択方法

オプションに属性 selected = "selected" を追加すると、それ...

Linux での Makefile の書き方と使い方の詳細な説明

目次メイクファイルMakefile の命名とルールMakefile の仕組みMakefile変数Ma...

MySQL 5.7.18 のインストールと設定方法のグラフィックチュートリアル (CentOS7)

LinuxにMySQL 5.7.18をインストールする方法1. MySQLをダウンロードします。公...

Docker可視化管理ツールであるDocker UIの使用

1. DockerUIの紹介DockerUI は Docker API をベースとしており、Dock...

MySQL Truncate の使用方法の詳細な説明

目次MySQL 切り捨ての使用1. 構文を切り捨てる2. Truncateの使用上の注意3. TRU...

JavaScript での AOP プログラミングの基本実装

AOP の紹介AOP (アスペクト指向プログラミング) の主な機能は、コアビジネスロジックモジュール...

Remレイアウトを使用して適応性を実現する

以前、モバイル適応に関する記事を書きました。非常に長く、内容が多すぎて読みづらいものでした。そこで、...

VUEはタイムライン再生コンポーネントを実装します

この記事の例では、タイムライン再生コンポーネントを実装するためのVUEの具体的なコードを参考までに共...

WeChat アプレット uniapp は左スワイプによる削除効果を実現します (完全なコード)

WeChatアプレットuniappは左スワイプで削除効果を実現成果を達成する1. スワイプしてリス...

Vue 値転送の 12 の方法の概要

目次1. 父から息子へ2. 息子から父へ3. ブラザーコンポーネント通信(バス) 4. ref/re...

Docker イメージのデフォルトの保存場所を変更する方法 (ソリューション)

システムの初期のパーティション分割により、オペレーティング システム内の対応する / パーティション...