一、 分割槽 的概念
二、 為什麼使用分割槽?(優點)
三、 分割槽型別
四、 子分割槽
五、 對分割槽進行修改(增加、刪除、分解、合併)
六、 不同引擎 的分割槽特性
七、 分割槽的限制性
分割槽概念
分割槽針對不同的資料庫 ,具有不同的特性。在這裡專門針對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...