MySQL調優之 partition分割槽I

2021-05-23 14:49:13 字數 3390 閱讀 4396

一、        分割槽 的概念

二、        為什麼使用分割槽?(優點)

三、        分割槽型別

四、        子分割槽

五、        對分割槽進行修改(增加、刪除、分解、合併)

六、        不同引擎 的分割槽特性

七、        分割槽的限制性

分割槽概念

分割槽針對不同的資料庫 ,具有不同的特性。在這裡專門針對mysql

資料 庫而言。在mysql 資料庫裡,分割槽這個概念是從mysql 5.1才開始提供的。不過目前只有在mysql advanced版本裡才提供。

分割槽是把資料庫、或它的組成部分(比如表)分成幾個小部分。而且專門介紹的都是』水平分割槽』,即對錶的行進行劃分。

分割槽的優點

1.        可以提高資料庫的效能 ;

2.        對大表(行較多)的維護更快、更容易,因為資料分布在不同的邏輯檔案 上;

3.        刪除分割槽或它的資料是容易的,因為它不影響其他表。

注意:pruning,即截斷。意思是說當你查詢 時,只掃瞄所需要查詢的分割槽。。其他部分不會掃瞄。。這就大大地提高了效能。

分割槽型別

分割槽具有如下4種型別:

range分割槽:是對乙個連續性的行值,按範圍進行分割槽;比如:id小於100;id大於100小於200;

list分割槽:跟range分割槽類似,不過它存放的是乙個離散值的集合。

hash分割槽:對使用者 定義的表達 式所返回的值來進行分割槽。可以寫partitions (分割槽數目),或直接使用分割槽語句 ,比如partition p0 values in…..。

key分割槽:與hash分割槽類似,只不過分割槽支援一列或多列,並且mysql伺服器 自身提供hash函式 。

具體描述:

分割槽語法:

create table t(id int,name varchar(20)) engine=myisam partition by range(id);

按range範圍進行分割槽:

create table orders_range

(id int auto_increment primary key,

customer_surname varchar (30),

store_id int,

salesperson_id int,

order_date date,

note varchar(500)

)  engine=myisam

partition by range(id)

(partition p0 values less than(5),

partition p1 values less than(10),

partition p3 values less than(15)

);其 實上面的分割槽建立,我們可知道,它的表型別為myisam,而每個分割槽的引擎也是myisam,這個可以通過show create table tablename檢視。當我們插入資料到表裡時,如果要檢視小於8的資訊,它之後檢索p0和p12個分割槽。這樣就非常快速了。

按list進行分割槽:

create table orders_list

(id int auto_increment,

customer_surname varchar(30),

store_id int,

salesperson_id int,

order_date date,

note varchar(500),

index idx(id)

) engine=myisam  partition by list(store_id)

(partition p0 values in(1,3),

partition p1 values in2,4,6),

partition p3 values in(10)

);list 分割槽只能把你插入的值放在某個已定的分割槽裡,若沒有那個值,,就顯示不能插入。

按hash進行分割槽:

create table orders_hash

(id int auto_increment primary key,

cutomer_surname varchar(30),

store_id int,

salesperon_id int,

order_date date,

note varcahr(500)

) engine=myisam  partition by hash(id) partitions 4;

如果分為4個分割槽,那當我插入資料時,哪些資料是放在哪些分割槽裡呢? 當我對某個id值進行檢索時,它明確說放到哪個分割槽裡?或者說是有什麼內部機制?

使用hash分割槽,最主要就是確保資料的分配,它是基於create table時提供的表示式。不必定義單獨的分割槽,只要使用partitions關鍵字和所需要分多少個區的數字。語句如上所述。

按key進行分割槽:

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;

這個分割槽類似於hash分割槽,除了mysql服務 器使用它本身的hash表示式,不像其他型別的分割槽,不必要求使用乙個int或null的表示式。

按子分割槽進行分割槽:

create table orders_range

(id int auto_increment primary key,

customer_surname varchar(30),

store_id int,

salesperson_id int,

order_date date,

note varchar(500)

) engine=myisam  partition by range(id)

subpartition by hash(store_id) subpartitions 2

(partition p0 values less than(5),

partition p1 values less than(10),

partition p3 values less than(15)

);當把資料插入到表中時,那什麼資料是放在子分割槽裡呢?

mysql 調優 Mysql調優

表設計 1 禁止使用外來鍵 2 多表中的相同列,必須保證列定義一致 3 國內表預設使用innodb,表字符集預設使用gbk,國際預設使用utf8的表 4 表必須包含gmt create和gmt modified欄位,即表必須包含記錄建立時間和修改時間的字段 5 單錶一到兩年內資料量超過500w或資料...

MySQL效能調優之Memory or SSD

當乙個傳統的向外擴充套件的方式對於mysql來講變得流行,看看我們不得不擴充哪一方面 便宜的記憶體?快速儲存?更好的電源效率?將會變得非常有趣。這裡確實有很多種選擇 我每週大概會遇到乙個客戶使用fushion io 卡。然而,我卻看到了他們乙個有趣的選擇 他們選擇購買乙個ssd,當他們每秒仍然能讀取...

mysql之sql效能調優

一 優化查詢sql語句第一課 1 理解eqp含義 執行sql語句時生成的qep並不確定,每次執行相同的sql也可能會由於周圍環境因素的變化而生成不同的qep 2 通過explain來分析sql語句 理解 key的含義 rows的含義 3 驗證表結構和確認表大小 驗證表結構 show create t...