ブリーフ
パーティションが、しかし、データベースへのアクセスの面で複数のより小さい、より管理部、唯一つの論理テーブルまたはインデックスにデータベーステーブル確かであるが、実際には、これはテーブルを添加することができることを意味一緒に物理パーティションを構成し、各パーティションは別個のオブジェクトであり、単独で扱うことができ、テーブルの一部として扱うことができる、パーティションは、アプリケーションのビジネスロジックに影響を与えることなく、アプリケーションに対して完全に透過的です。
MySQLのパーティションの利点:
1.単一の比較と単一のディスクまたはファイルシステムができ、より多くのデータを保存します。
2. クエリを最適化し、例えば、「分割統治」のアイデアを使用してwhere
、条件句を含むパーティションは、全表スキャンのパフォーマンスがもたらす行方不明避けるために、一つだけ必要か、いくつかのパーティションをスキャンすることができるとき。また、使用SUM
してCOUNT
アイソクロナス集計関数は、あなたがアイデア、効率を改善するために、各パーティションのためだけの要約結果をマージすることができます。
3.が満了又はジャンクデータを除去するために、クエリが特定のパーティションを除去することによって低減することができます。
特記事項:
1.ほとんどのストレージエンジン(InnoDB
、MyISAM
、Memory
など)のパーティションをサポートしている、MERGE
とCSV
パーティションはサポートされていません。
2.あなたは使用することができますSHOW VARIABLES LIKE '%partition%'
(バージョン5.6以下、より5.6を使用するSHOW PLUGINS
MySQLのパーティションをサポートし、現在のバージョンを表示します)。
3.同じパーティション表は、異なるパーティション表の異なるストレージエンジンを使用したが、MySQLサーバと、同じデータベースを同一のストレージエンジンを使用しなければなりません。
4.MySQLゾーニングは、そのデータ(またはインデックス)を分割するだけではなく、テーブルのすべてのデータとインデックスに適用されます。分割されたテーブルの上に作成されたすべてがなければなりませんLOCAL索引
。
パーティションの種類
パーティションの種類 | 入門 |
---|---|
範囲 | パーティションフィールド制限間隔範囲に割り当てられたパーティションを、例えばLESS THAN (100) |
リスト | パーティションフィールドの使用列挙例えば、パーティションを割り当てましたIN (1, 2, 3) |
ハッシュ | パーティションフィールドは、実行ハッシュアルゴリズムホット分散データを達成するために、パーティションテーブルインデックスリストで得られます、 |
キー | 同様にHASHパーティションは、カスタム式をサポートしていないパーティション・キーとしてタイプを。 |
RANGEパーティション
範囲にパーティションテーブルを使用して、レンジ・パーティションテーブルへのセクション重複連続的ではない使用、
VALUES LESS THAN
オペレータ定義パーティションを
フォーマット:
# 建表
CREATE TABLE emp(
# 字段集
) ENGINE=InnoDB DEFAULT CHARSET=utf8 # 默认配置
PARTITION BY RANGE (分区字段) (
PARTITION 分区名称 VALUES LESS THAN (值1),
PARTITION 分区名称 VALUES LESS THAN (值2),
PARTITION 分区名称 VALUES LESS THAN (max_value)
);
例としてはemp
、パーティションテーブルは、パーティションは、フィールドを参照しますstored_id
。
CREATE TABLE emp(
id INT NOT NULL,
ename VARCHAR(20),
job VARCHAR(30),
stored_id INT NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
PARTITION BY RANGE (stored_id) (
PARTITION p01 VALUES LESS THAN (10),
PARTITION P02 VALUES LESS THAN (20),
PARTITION p03 VALUES LESS THAN (30)
);
emp
パーティションテーブルのフィールドstored_id
、最高パーティションp03
最大受信は、30であるので、実行するときにINSERT
場合、動作をstored_id>30
それがエラーが発生したためパーティションの検出されません。
mysql> insert into emp values(3, "123", "worker", 33);
ERROR 1526 (HY000): Table has no partition for value 33
ビューテーブルのパーティション情報:
現在のパーティション内の表示情報テーブルinformation_schema
のpartition
取得、テーブル、schema()
データベースライブラリの現在のインスタンスを取得するための機能
SELECT
partition_name,
partition_expression,
partition_description,
table_rows
FROM
INFORMATION_SCHEMA.PARTITIONS
WHERE
TABLE_SCHEMA = SCHEMA()
AND TABLE_NAME = '表名';
+----------------+----------------------+-----------------------+------------+
| partition_name | partition_expression | partition_description | table_rows |
+----------------+----------------------+-----------------------+------------+
| p01 | stored_id | 10 | 0 |
| P02 | stored_id | 20 | 0 |
| p03 | stored_id | 30 | 0 |
+----------------+----------------------+-----------------------+------------+
3 rows in set (0.00 sec)
注意:
最小値として扱われる場合は1レンジ・パーティションは、パーティション・キーの値がNULLになります
あなたが日付列または文字列の列のパーティションにしたい場合は2.RANGEパーティションは、整数列のパーティションをサポートし、その後、あなたは機能の面で、たとえば、型を整数に、他のタイプを使用する必要があるYEAR()
、TO_DAYS()
、TO_SECONDS()
時間の整数に変換することができます関数はCONVERT('12345', SIGNED)
、CAST('12345', SIGNED)
文字を実現しましたデジタルへの変換文字列
古いデータを削除するには3.ができALTER TABLE [表名] DROP PARTITION [分区名]
達成されます。
LISTパーティション
LIST
パーティションおよびRANGE
パーティションがリストに列挙し、コレクションのリストであることを除いて、同様のパーティションは、RANGEの範囲であります
LIST
パーティション使用することによってPARTITION BY LIST(expr)
達成句を、expr
行または関数式に基づいてカラムである、式は常に最後により、整数データを返しVALUES IN (values_list)
、パーティションを定義する方法value_list
整数のリストであり、RANGE
別のパーティションこれは、特定の順序である必要はないことにあります
フォーマット:
# 建表
CREATE TABLE xxx(
# 字段
) ENGINE=InnoDB DEFAULT xxxx
PARTITION BY LIST(expr)(
PARTITION p1 VALUES IN (1, 2, 4),
PARTITION P2 VALUES IN (3, 5, 7),
PARTITION p3 VALUES IN (6)
);
ビューが含まれていない場合は挿入された列の値がvalues_listに説明します。
COLUMNSパーティション
以前RANGEは、LISTをサポートしていないと述べた
expr
非整数値を、MySQLは後ろに現れCOLUMNS
用のパーティションRANGE
とLIST
も知られているゾーニングの包装、RANGE COLUMNS()
およびLIST COLUMNS()
ので、元RANGEとLISTが機能する必要が解決し、非整形のデータ変換の問題
また、COLUMNS
パーティションがコンポジット・パーティションキーとして複数列のフィールドをサポートしています。そして、およそorder by
2つの同様のフィールドに続いた意味が、パーティションキーとして表現をサポートしていません。
CREATE TABLE t1(
a INT,
b INT
)
PARTITION BY RANGE COLUMNS(a, b) (
PARTITION p_t1_1 VALUES LESS THAN (0, 10),
PARTITION P_t1_2 VALUES LESS THAN (10, 10),
PARTITION P_t1_3 VALUES LESS THAN (20, 20),
PARTITION P_t1_4 VALUES LESS THAN (25, 30)
);
ケース内に挿入された場合、例えば、Bに挿入され、1、15であるP_t1_3
に挿入される(1、10)、パーティションテーブルP_t1_2
。
HASHパーティショニング
ハッシュ・パーティションは、主区画の所定の数のデータは、パーティションがハッシュテーブルに実行されることを確実にするために均等にできるだけ分散熱い分散液を、読み取るために使用され、MySQLのパーティションキーをするデータを決定するために、ハッシュ関数を適用しますこれでN・パーティションのパーティション。
モジュロ演算を使用して、従来のパーティションは、線形アルゴリズムを使用して線形パーティションが2パーティションテーブルのパワーを決定するステップと、HASH MySQLは他のパーティションは、線形HASH(線形ハッシュ)であり、2つのパーティション、一つの従来のハッシュ・パーティションをサポートします。
使用されるPARTITION BY [linear] HASH (expr) PARTITIONS p_num
場合、p_num
パーティションの数は、単語ではなく、2アルゴリズムの線形電源を使用するのではなく、データを決定するためにモジュロ演算を使用してパーティションの位置に、任意の線形、線形結合、線形パーティションを考慮しています。
CREATE TABLE T2(
ID INT NOT NULL
)
PARTITION BY HASH (ID) PARTITIONS 4;
挿入などid=234
に値をT2
テーブル、彼に格納されるp2
テーブル。ここにあります
mysql> select partition_name, partition_expression, table_rows from information_schema.partitions where table_schema=schema() and table_name='t2';
+----------------+----------------------+------------+
| partition_name | partition_expression | table_rows |
+----------------+----------------------+------------+
| p0 | ID | 0 |
| p1 | ID | 0 |
| p2 | ID | 1 |
| p3 | ID | 0 |
+----------------+----------------------+------------+
4 rows in set (0.00 sec)
モデューロ:
パーティションの合計数を想定num
、パーティション番号はN
、その後、N=MOD(expr, num)
その、expr
パーティションキーを表します。
リニア電源アルゴリズム2:
パーティションの合計数を想定num=4
、パーティション番号はN
、パーティションキーが挿入されています234
第二に、いくつかの数学関数を使用するには:POWER(x, y)
に代わってX的y次方
、CEILING(x)
代わってx向上取整
最初のステップ、次以上の取得num
にM 2のパワーを、次いで得られたが2^m
、この値に設定されているV
、すなわち:V=Power(2, Ceiling(Log(2, num)))
2 ^ X> = NUM - > X = 2
2のべき乗の値は、X ^ 2 = 4であります
第二段階の設定は、N=F(columns_list)&(V-1)
、F(columns_list)
キーパーティションキーです234
。
N = 234&3=11101010&11 = 2
主なパーティション
キーパーティションおよびハッシュ・パーティション化は、それが主なパーティションがあるので、キーインデックスがリンク分割しなければならない、とこの指標もでなければならない、ことを除いて、似ている主キーまたは一意索引
プライマリキーと、テーブル内の一意のキーの欠如にパーティションを作成する場合は、エラーが発生します。また、パーティションの確立時に、パーティション・キーを指定した場合、それはテーブルの主キー(デフォルト)またはパーティションキーとして一意のキーにデフォルト設定されます。
フォーマット
CREATE TABLE xx(
# 字段
)
PARTITION BY KEY (expr) PARTITIONS P_NUM
p_num
それでも、それは非負の整数である、パーティションの数です。