MySQLデータベースパーティション(Database partition)


データベースパーティションの認識
データベースパーティションは物理データベース設計技術であり、DBAとデータベースモデリング担当者はよく知っています.パーティション化技術は多くの効果を達成できるが、応答時間を短縮するために、特定のSQL操作でデータの読み書きの総量を減らすことが主な目的である.
データベースパーティションの利点
パフォーマンスの向上
スキャン操作では、MySQLのオプティマイザが特定のクエリーに必要なデータがどのパーティションに含まれているかを知っていれば、不要な場所をスキャンするのに多くの時間を費やさずに、パーティションのデータを直接スキャンすることができます.例を挙げる必要がありますか?はい、百万行のテーブルは10つのパーティションに分けられています.各パーティションには10万行のデータが含まれています.パーティションをクエリーするのにかかる時間は、テーブル全体のスキャンの10分の1にすぎません.明らかな対比です.同時に、10万行のテーブルにインデックスを作成する速度も、100万行よりもずっと速くなります.これらのパーティションを異なるディスクに構築できれば、このときのI/Oの読み書き速度は「想像にたえない」(誤語ではなく、本当に速すぎて、理論的には100倍の速度が向上しています.これはどんなに速い応答速度なのか、少し想像にたえません).
データ管理のシンプル化
パーティション化テクノロジーは、DBAのデータ管理能力を向上させることができます.DBAは、優れたパーティション化により、特定のデータ操作の実行方式を簡略化することができる.例えば、DBAは、あるパーティションの内容を削除するとともに、残りのパーティションのデータ整合性を保証することができる(これは、テーブルのデータ削除という大きな動作と比較される).また、パーティションはMySQLシステムによって直接管理されており、DBAは手動で分割やメンテナンスする必要はありません.例えば:これは例えば面白くなくて、言わないで、もしあなたがDBAならば、あなたが区分した限り、後であなたは気にしないでください.
データベースパーティション形式
水平パーティション(HorizontalPartitioning)
水平パーティションはテーブルの行をパーティション化します.各パーティションの列は同じです.年齢、日付、自己増加プライマリ・キーを使用できます.
垂直パーティション(VerticalPartitioning)
垂直パーティションは、テーブルのカラムをパーティション化し、テーブルの幅を減らし、特定のカラムを特定のパーティションに配置し、クエリーの効率を向上させ、垂直パーティションがサポートされているかどうかを確認します.
show variables like '%partition%';

データベースパーティション形式
RANGEパーティション
連続区間の列値に基づいてパーティション化(日付、自増プライマリ・キー)
LISTパーティション
RANGEパーティションと同様に、LISTパーティションは、カラム値が離散値セットの値に一致することに基づいて選択されます.
HASH区分
テーブルに挿入するローのカラム値を使用して計算される、ユーザー定義式の戻り値に基づいて選択されるパーティション.この関数には、MySQLで有効な非負の整数値を生成する式が含まれます.
KEYパーティション
HASHパーティションと同様に、KEYパーティションは1列または複数列の計算のみをサポートし、MySQLサーバは独自のハッシュ関数をサポートします.整数値を含む列または複数の列が必要です.
複合パーティション
RANGE/LISTタイプのパーティションテーブルにおける各パーティションの再分割に基づく.サブパーティションはHASH/KEYなどのタイプを使用できます
MySQLパーティションインスタンス
RANGEパーティション
自増主キーIDに基づいて範囲分割
create table user(
id int primary key auto_increment,
username varchar(20) ,
age int
)
partition by rang(id)
(
partition p1 values less than(100),
partition p2 values less than(200),
partition p3 values less maxvalue
);

LISTパーティション
性別をパーティション化してLISTパーティション化する
create table user(
id int primary key auto_increment,
username varchar(20) ,
age int,
sex int,   -- 012primary key(id,sex)
)
partition by list(sex)
(
partition p1 values in (0),
partition p2 values in (1),
partition p3 values in (2)    
)

HASHパーティション(パーティションのカラム名、式、パーティション数を指定するだけ)
性别を区分の根拠にして、HASH区分をして、区分の数量は3です
create table user(
id int primary key auto_increment,
username varchar(20) ,
age int,
sex int,   -- 012primary key (id,sex)
)
partition by hash(sex)
partitions 3;

KEYパーティション(HASHパーティション類似)
性别を区分の根拠にして、HASH区分をして、区分の数量は3です
create table user(
id int primary key auto_increment,
username varchar(20) ,
age int,
sex int,   -- 012primary key(id,sex)
)
partition by key(sex)
partitions 3;

複合パーティション(RANGE/HASH)
create table user(
id int  auto_increment,
username varchar(20) ,
age int,
sex int,   -- 012primary key(id,sex)
)
partition by range(id)
subpartition by hash(sex)
subpartitions 3
(
partition p1 value less than (200),
partition p2 value less than maxvalue
);

データベースパーティションの操作
パーティションの削除
alter table user drop partition p1;  --    HASH  KEY  
alter table user drop partition p1,p2;

パーティションの追加
alter table user add partition (partition p4 values less than (300));
alter table user add partition (partition p4 value in (3));

パーティションの分割
alter table user reorganize partition p1 into
(
partition p1 values less than (50),
partition p4 values less than (100)
); --          

パーティションのマージ
alter table user reorganize partition p1,p4 into(partition p1 values less than (100));

テーブルのすべてのパーティションの削除
alter table user remove partitioing;

パーティションの再構築
alter table user rebuild partition p1,p2;

パーティションの最適化
 alter table user optimize partition p1,p2;

パーティションの分析
alter table user analyze partition p1,p2;

パーティションのパッチ
alter table user repair partition p1,p2;

パーティションの確認
alter table user check partition p1,p2;

パーティション表情報の表示
パーティション表を作成する文の表示
show create table user;

パーティション表の表示
show table status;

パーティション情報の表示
SELECT
    partition_name part,
    partition_expression expr,
    partition_description descr,
    table_rows
FROM
    information_schema. PARTITIONS
WHERE
    table_schema = SCHEMA ()
AND table_name = 'user';