mysql分割槽partition詳解

2022-04-22 09:41:07 字數 4502 閱讀 3932

分割槽管理論壇

1. range和list分割槽的管理

針對非整形字段進行rang\list分割槽建議使用columns分割槽。

range columns是range分割槽的一種特殊型別,它與range分割槽的區別如下:

1. range columns不接受表示式,只能是列名。而range分割槽則要求分割槽的物件是整數。

2. range columns允許多個列,在底層實現上,它比較的是元祖(多個列值組成的列表),而range比較的是標量,即數值的大小。

3. range columns不限於整數物件,date,datetime,string都可作為分割槽列。

create table rcx (

a int,b int,c char(3),d int

)partition by

range columns(a,d,c) (

partition p0 values less than (5,10,'ggg'),partition p1 values less than (10,20,'mmmm'),partition p2 values less than (15,30,'sss'),partition p3 values less than (maxvalue,maxvalue,maxvalue)

);

view code

新增

create table if

not exists `t1` (

`id` int(10) unsigned not null auto_increment comment 'xxid',`store_id` int(10) unsigned not null,`customer_surname` varchar(30) not null,primary

key(`id`)

) engine=innodb default charset=utf8 comment='xx表' auto_increment=1partition by range(id)(

partition p0 values less than(5),partition p1 values less than(10),partition p2 values less than(15)

);

追加

alter table t1 add partition(

partition p3 values less than(20)

);

修改分割槽為key型別的分割槽
#

這和先刪除這個表、然後使用「create table t1 partition by key(id) partitions 2;」重新建立這個表具有同樣的效果

alter table t1 partition by key(id) partition 2;

如果希望改變表的分割槽而又不丟失資料,使用「alter table ... reorganize partition」語句
#

分解分割槽 將p0拆分為s0和s1

alter table members reorganize partition p0 into (

partition s0 values less than (3),partition s1 values less than (5));#

合併分割槽 將s0和s1合併為p0

alter table members reorganize partition s0,s1 into (

partition p0 values less than (5));#

合併分割槽 將s0和s1合併為 r0 r1

alter table members reorganize partition s0,s1 into (

partition s0 values less than (2),partition p0 values less than (5)

);

刪除分割槽

#

當刪除了乙個分割槽,也同時刪除了該分割槽中所有的資料

alter table t1 drop partition p0,p1,p2,p3;

#如果希望從所有分割槽刪除所有的資料,但是又保留表的定義和表的分割槽模式,使用truncate table命令

2. hash和key分割槽的管理

增加:

create table clients(

id int not

null,firstname varchar(30),lastname varchar(30),hired

date not null

default '1970-01-01',separated

date not null

default '9999-12-31',

signed

date

)partition byhash(month(signed))

partitions 12;

//將hash型別的分割槽分為12個

//基於時間型別的字段的轉換函式mysql提供了"year(),month(),day(),to_days(),to_seconds(),weekday(),dayofyear()

修改:coalesce

#

將12個分割槽改為6個

alter table clients coalesce partition 6;

刪除3. 分割槽維護

。對於分割槽表,mysql不支援命令check table,optimize table,analyze table,或repair table。作為替代,可以使用alter table 的許多擴充套件來在乙個或多個分割槽上直接地執行這些操作,如下面列出的那樣
重建分割槽:

alter table t1 rebuild partition (p0, p1);

優化分割槽:如果從分割槽中刪除了大量的行,或者對乙個帶有可變長度的行(也就是說,有varchar,blob,或text型別的列)作了許多修改,可以使用「alter table ... optimize partition」來收回沒有使用的空間,並整理分割槽資料檔案的碎片
4. 獲取關於分割槽的資訊

#

在乙個給定的分割槽表上使用「optimize partition」等同於在那個分割槽上執行check partition,analyze partition,和repair partition。

alter table t1 optimize partition (p0, p1);

分析分割槽:讀取並儲存分割槽的鍵分布
alter table t1 analyze partition (p3);

修補分割槽: 修補被破壞的分割槽。
alter table t1 repair partition (p0,p1);

檢查分割槽: 可以使用幾乎與對非分割槽表使用check table 相同的方式檢查分割槽
#

這個命令可以告訴你表t1的分割槽p1中的資料或索引是否已經被破壞。如果發生了這種情況,使用「alter table ... repair partition」來修補該分割槽

alter table trb3 check partition (p1);

#還可以使用mysqlcheck或myisamchk 應用程式,在對錶進行分割槽時所產生的、單獨的myi檔案上進行操作,來完成這些任務。請參見8.7節,「mysqlcheck:表維護和維修程式」

4.獲取關於分割槽的資訊

檢視建表結構

show create table  表名;#

當前,對於按hash或key分割槽的表,partitions子句並不顯示

檢視是否支援分割槽

show variables like '%partition%';
表的各種引數狀態

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='填入你要檢視的表名';

通過資料字典檢視分割槽資訊

select * from information_schema.partitions;
通過此語句掃瞄分割槽及其使用情況

explain partitions select * from mdl_user;

MapReduce的分割槽 (Partition)

分割槽的概念 在mapreduce中,資料進行map轉換後,預設根據map後資料的key值進行雜湊派發,同乙個分割槽的資料傳送到同乙個reduce中去處理。但實際中,這種方式不是高效的,並且有時並不能滿足我們的需求。所以我們需要自定義分割槽方式,根據自己的需求,選擇記錄的reducer。進行自定義分...

spark按照key分割槽 partitionBy

按照key分割槽,所以資料必須是k v鍵值對型別 val rdd rdd string int sc.makerdd list a 1 b 2 c 3 d 4 2 println 重新分割槽前 index,datas collect println 重新分割槽後 按照雜湊值進行分割槽 val new...

mysql分割槽邊 mysql分割槽

檢視資料庫版本是否支援分割槽 分割槽的四種型別 range分割槽 範圍分割槽,根據某個欄位的值來進行分割槽,某個連續的區間來進行區分 建立表時分區create table teacher id varchar 20 not null name varchar 20 age varchar 20 bi...