基本概念
把一個表,從邏輯上分成多個區域,便於存儲數據。
采用分區的前提,數據量非常大。
如果數據表的記錄非常多,比如達到上億條,數據表的活性就大大降低,數據表的運行速度就比較慢、效率低下,影響mysql數據庫的整體性能,就可以采用分區解決
分區是mysql本身就支持的技術
分區算法
list分區
list :條件值為一個數據區。
算法:根據“字段的內容值”是否在某個“區域”中進行分區,通過預定義的列表的值來對數據進行分割。
語法:
利用表選項:partition 完成。
create table table_name(
字段信息,
索引,
) charset utf8
partition by list(分區字段)(
partition list_name1 values in (),
partition list_name2 values in()
);
例子:創建一張表,該表保存有全國20家分公司的職員記錄,這20家分公司的編號從1到20.而這20家分公司分布在全國4個區域,如下表所示:
id name store_id(分公司的id)
北部 1,4,5,6,17,18
南部 2,7,9,10,11,13
東部 3,12,19,20
西部 8,14,15,16

查看執行計划

注意:where后面的字段必須是分區字段

range分區
定義:利用“字段值”取值范圍將數據分區,區間要連續並且不可以重疊,使用VALUES LESS THAN 進行分區定義
less than 小於等於
MAXVALUE 可能的最大值
例子:用戶余額表
create table p_range(
id int(11) NOT NULL,
name varchar(32) NOT NULL,
totle_money int(11) NOT NULL
)
partition by range (totle_money)(
partition p1 values less than (100),
partition p2 values less than(1000),
partition p3 values less than(10000),
partition p4 values less than MAXVALUE
);
注意:
1,上面分區語句的VALUES LESS THAN MAXVALUE子句是表示當有大於10000的時候都插入到p4中,MAXVALUE代表最大可能整數值,否則當我們插入一條記錄包含10001時會報錯。
2,順序是有規定的,當把p1設為1000而p2設為100時會報錯。
3,無論是哪一種分區類型,如果表里有主鍵,則分區字段必須是主鍵或者主鍵的一部分,否則會報錯。
A PRIMARY KEY must include all columns in the table's partitioning function
如果添加主鍵 alter table p_range add PRIMARY key(id,totle_money)


文件存儲信息

增加分區
給 range/list 增加分區
alter table table_name add partition(
partition 分區名 values less than (常量)
或
partition 分區名 in (n,n,n)
);
刪除分區
給 range/list 刪除分區
alter table table_name drop partition 分區名稱;
注意:刪除的分區里的數據會被刪除。
