ホームページ  >  記事  >  データベース  >  MySQL Advanced 15 - テーブルのパーティショニング

MySQL Advanced 15 - テーブルのパーティショニング

黄舟
黄舟オリジナル
2016-12-29 17:00:40900ブラウズ

1. パーティショニングを使用する理由

データ量が大きすぎる場合(通常は数百万、数千万のデータ)、1つのテーブルのデータを複数のテーブルに分割して保存する必要があります。一部のクエリは大幅に最適化できます。これは主に、特定の WHERE ステートメントを満たすデータを 1 つ以上のパーティションにのみ格納できるため、検索で他の残りのパーティションを探す必要がないためです。

2. mysql がパーティショニングをサポートしているかどうかを確認します

次のコマンドを使用して、mysql がパーティショニングをサポートしているかどうかを確認します。 ?

show variables like '%partition%';


——出力変数が Yes の場合、mysql がパーティショニングをサポートしていることを意味します。

3. 範囲パーティション
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;


4. リストパーティション

は、RANGEパーティション化と似ていますが、異なる点は、LISTパーティション化は、離散値セット内の特定の値に一致する列値に基づいて選択されることです。

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) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。