ホームページ >データベース >mysql チュートリアル >MySQL Advanced 15 - テーブルのパーティショニング
1. パーティショニングを使用する理由
データ量が大きすぎる場合(通常は数百万、数千万のデータ)、1つのテーブルのデータを複数のテーブルに分割して保存する必要があります。一部のクエリは大幅に最適化できます。これは主に、特定の WHERE ステートメントを満たすデータを 1 つ以上のパーティションにのみ格納できるため、検索で他の残りのパーティションを探す必要がないためです。
2. mysql がパーティショニングをサポートしているかどうかを確認します
次のコマンドを使用して、mysql がパーティショニングをサポートしているかどうかを確認します。 ?
show variables like '%partition%';
CREATE TABLE employees ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT '1970-01-01', separated DATE NOT NULL DEFAULT '9999-12-31', job_code INT NOT NULL, store_id INT NOT NULL ) partition BY RANGE (store_id) ( partition p0 VALUES LESS THAN (6), partition p1 VALUES LESS THAN (11), partition p2 VALUES LESS THAN (16), partition p3 VALUES LESS THAN (21) );
この例では、店員に関連するすべての行がパーティション p0 に保存され、オフィスとサポート スタッフに関連するすべての行がパーティション p1 に保存され、管理に関連するすべての行が保存されます。パーティション p2 中央にあります。
ビューパーティション
show create table employees;
LIST パーティショニングは、「PARTITION BY LIST(expr)」を使用して実現されます。「expr」は、特定の列値または特定の列値に基づく式であり、整数値を返し、「VALUES IN」を渡します。 (value_list)"。ここで、「value_list」はカンマで区切られた整数のリストです。
create table category_part( cid int unsigned not null auto_increment,cname varchar(64) not null,parent_id int not null,primary key (cid,parent_id)) partition by list(parent_id)( partition p1 values in (1,2,3,6,9), partition p2 values in (4,5,10,22,23), partition p3 values in (7,8,11,12,13), partition p4 values in (14,15,16,17,20), partition p5 values in (18,19,21,24,25) );
5. ハッシュ パーティショニング
ハッシュ パーティショニングの目的は、データを事前定義されたパーティションに均等に分散して、各パーティションのデータ量がほぼ同じになるようにすることです。 RANGE および LIST パーティションでは、特定の列値または列値のセットをどのパーティションに保存するかを明示的に指定する必要があります。HASH パーティション化では、MYSQL がこれらのタスクを自動的に完了し、ユーザーが行う必要があるのはデータに基づいて行うことだけです。列の値は列の値または式を指定し、パーティション化されたテーブルを分割するパーティションの数を指定します。
HAHS パーティショニングを使用してテーブルを分割するには、PARTITION BY HASH (expr) 句を CREATE TABLE ステートメントに追加します。ここで、「expr」は整数を返す式です。 expr には、フィールド型が整数の列名を指定できます。さらに、ユーザーは後で PARTITITIONS num 句を追加する必要がある可能性があります。ここで、num は非負の整数で、分割されるパーティションの数を表します。 PARTITIONS 句が含まれていない場合、パーティションの数はデフォルトで 1 になります。
create table t_hash ( a int, b datetime) partition by hash (YEAR(b)) partitions 4;
LINEAR HASH パーティショニングの利点は、パーティションの追加、削除、マージ、分割が高速になることであり、大量のデータを含むテーブルを処理する場合に有益です。 。欠点は、HASH パーティショニングを使用して得られるデータ分散と比較して、各パーティション間のデータの分散のバランスが取れない可能性があることです。
6. キー パーティション
create table orders_key ( id int auto_increment, customer_surname varchar(30), store_id int, alesperson_id int, order_Date date, note varcahr(500), index_idx(id) ) engine=myisam partition by key(order_date) partitions 4;
このパーティションは、MySQL サーバーが独自のハッシュ式を使用する点を除けば、他のタイプのパーティションとは異なり、int または null 式を使用する必要がありません。
上記は MySQL Advanced 15 - Table Partitioning の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。