mysqlの複数フィールドのパーティショニング

(*-*)浩
リリース: 2019-05-10 13:32:32
オリジナル
6977 人が閲覧しました

パーティショニングは特定のルールに基づいており、データベースはテーブルを複数のより小さく管理しやすい部分に分解します。データベース アプリケーションへのアクセスに関する限り、論理的にはテーブルまたはインデックスが 1 つだけ存在しますが、実際には、このテーブルは N 個の物理パーティション オブジェクトで構成されている可能性があります。各パーティションは独立したオブジェクトであり、独立して処理でき、一部として使用できます。テーブルの処理用。パーティショニングはアプリケーションに対して完全に透過的であり、アプリケーションのビジネス ロジックには影響しません。

推奨コース: MySQL チュートリアル

mysqlの複数フィールドのパーティショニング

パーティショニングは、非常に大きなテーブルの管理に役立ちます。分割統治のロジックが採用されています。パーティショニングでは、パーティション キーの概念が導入されています。パーティション キーは、パーティションの計算に使用されます。特定の間隔値 (または範囲) に従った値。値)、特定の値リスト、またはハッシュ関数値を使用してデータ集約を実行し、規則に従ってデータを異なるパーティションに分散して、1 つの大きなオブジェクトをいくつかの小さなオブジェクトにすることができます。

MySQL パーティショニングでは、データまたはインデックスを分割できます。

注: どのような種類のパーティション分割であっても、パーティション テーブルに主キー/一意キーが存在しないか、パーティション テーブルの主キー/一意キーにパーティション キーが含まれている必要があります。つまり、主キー/一意キー以外のフィールド、その他のフィールドパーティションは使用できません。

#MySQL パーティションの制限には、主に次の 4 つの側面が含まれます。 #単一のディスクまたはファイル システム パーティションと比較して、より多くのデータを保存できます

クエリを最適化します。 where 句にパーティション条件が含まれている場合、必要な 1 つ以上のパーティションのみをスキャンしてクエリの効率を向上させることができます。同時に、sum() や count() などの集計関数を含むクエリの場合は、簡単にスキャンできます。各パーティションを並列処理し、最後にすべてのパーティションから得られた結果を要約するだけで済みます。

期限切れのデータや保存する必要のないデータについては、これらのデータに関連するパーティションを削除することで、データをすぐに削除できます。

複数のディスクを使用してデータ クエリを分散し、クエリ スループットを向上させます。

パーティショニングは、水平テーブル パーティショニングと似ています。クエリは、大きなテーブルのデータを複数の小さなテーブルに分割します。テーブル全体のスキャンは必要ありません。特定のパーティションのみをスキャンする必要があるため、パーティション化によりクエリ速度が向上します。

水平シャーディングでは、ユーザーが事前に複数のシャーディング テーブル (tbl_user0、tbl_user1、tbl_user2 など) を手動かつ明示的に作成し、クライアント エージェント (Sharding-JDBC など) またはミドルウェア エージェント ( Mycat など) を使用してテーブル分割ロジックを実装します。

Partition は MySQL のプラグイン機能で、大きなテーブルのデータをデータベースの下部にある複数のパーティション ファイル (tbl_user#P#p0.ibd、tbl_user#P#p1 など) に分割します。 .ibd, tbl_user#P #p2.ibd)、水平パーティショニングとは異なり、パーティショニングでは「パーティショニング テーブル」を明示的に作成する必要はありません。データベースは自動的にパーティション ファイルを作成します。ユーザーに表示されるのは、実際には次の通常のテーブルです。複数のパーティションはシールドされており、ユーザーに対して透過的です。その使用法はテーブルを使用するのとまったく同じです。実装するための関数は必要ありません。パーティションは論理的な水平テーブルですが、物理レベルでは依然としてテーブルです。

mysql5.5 より前では、レンジ パーティショニングとリスト パーティショニングは整数パーティショニングのみをサポートしており、追加の関数操作または追加の変換を通じて整数を取得できました。列パーティションは範囲列とリスト列に分割され、整数 (tinyint から bigint、10 進数と浮動小数点数はサポートされません)、日付 (日付、日時)、文字列 (char、varchar、binary、varbinary) の 3 つの主要なデータ型をサポートします。 )。

列パーティショニングでは、1 つ以上のフィールドをパーティショニング キーとしてサポートしますが、式をパーティショニング キーとしてサポートしません。これは範囲パーティショニングやリスト パーティショニングとは異なります。範囲列パーティション キーの比較はタプル比較、つまりフィールド グループ比較に基づいており、範囲パーティション化とは異なることに注意してください。

 create talbe rc3 (    
    a int,
    b int
)
partition by range columns(a, b) (
    partition p01 values less than (0, 10),
    partition p02 values less than (10, 10),
    partition p03 values less than (10, 20),
    partition p04 values less than (10, 35),
    partition p05 values less than (10, maxvalue),
    partition p06 values less than (maxvalue, maxvalue),
);

insert into rc3(a, b) values(1, 10);

select (1, 10) < (10, 10) from dual;

-- 根据结果存放到p02分区上了
select
    partition_name,
    partition_expression,
    partition_description,
    table_rows
from information_schema.partitions
where table_schema = schema() and table_name = 'rc3';
ログイン後にコピー

レンジ列パーティションキーの比較 (タプルの比較) は実際には複数列のソートであり、最初に a フィールドに従ってソートされ、次に b フィールドに従ってソートされ、ソート結果に従ってデータがパーティション化されます。 、および範囲の単一フィールドのパーティショニング 並べ替えのルールは実際には同じです。




















##

以上がmysqlの複数フィールドのパーティショニングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート