createtable
t (id
int)engine
=innodb
partition
byrange(id) (
partition p0
values less than (10
),partition p1
values less than (20),
partition p2 values less than maxvalue);
建立分割槽之後,sql的優化器會根據你的sql進行分割槽的查詢優化,比如你查詢id為8的資料,sql優化器就會幫你查詢p0分割槽,不會去查詢其他分割槽。所以這樣開啟分割槽大大提公升了查詢速度。但是如果你查詢的資料是id>8,那麼就會查詢多個分割槽的資料,這樣分割槽的開啟意義就不是很大了,我們要根據具體的業務場景合適的選擇分割槽。
list分割槽和range分割槽非常相似,只是list分割槽列的值是離散的,而非連續的。
createtable
t (a
int, b int
)engine
=innodb
partition
bylist(b)(
partition p0
values
in (1,3,5,7,9
),partition p1
values
in (0,2,4,6,8
));
注意:range分割槽和list分割槽一樣,如果插入的時候,資料沒有匹配到對應的分割槽,資料庫會丟擲異常。
hash分割槽的目的是將資料均勻的分布在預先設定的區中,保證每個分割槽的資料量大致是一樣的。在range和list分割槽中,必須明確指定乙個列值或者列值集合用來保證資料存入哪個分割槽,但是在hash中,mysql自己完成了這些工作,使用者所要做的只是基於將要進行雜湊分割槽的列值指定乙個列值或者表示式,以及分割槽的數量即可。
createtable
t_hash(
a int,b datetime
)engine
=innodb
partition
by hash (year
(b))
partitions
4;
mysql資料庫還支援更複雜的linear hash的分割槽,語法只是hash改為了 linear hash。
linear hash分割槽的優點在於,增加、刪除、合併和拆分分割槽變得更加快捷,有利於處理大量資料的表,缺點在於,與使用hash分割槽得到的資料分布相比,每個分割槽資料分布可能不均勻。
key分割槽和hash分割槽類似,不同之處就是hash分割槽是採用使用者定義的函式進行分割槽,key分割槽使用mysql資料庫提供的函式進行分割槽。
createtable
t_key (
a int,b
datetime
)engine
=innodb
partition
bykey
(b)partitions
4;
可以視為是list分割槽和range分割槽的進化。columns分割槽可以直接使用非整形的資料進行分割槽,也可以使用多個列進行分割槽。
支援的資料型別:
建立多列分割槽:
createtable
t_column (
a int, b int, c char(3), d int
)engine
=innodb
partition
byrange columns (a,d,c) (
partition p0
values less than(5,10,'
ggg'
),partition p1
values less than(10,20,'
mmm'
),partition p2
values less than(15,30,'
sss'
),partition p3
values
less than(maxvalue,maxvalue,maxvalue));
子分割槽是在分割槽的基礎上再進行分割槽,mysql允許在range分割槽和list分割槽上載進行hash或key的子分割槽。
子分割槽建立要注意以下問題:
分割槽使用需要慎重,合理的分割槽可能帶來效能上的提公升,但是分割槽不合理可能會導致效能的下降,比如b+樹2次io的操作由於分割槽過多,分割槽不理想,就會出現 分割槽數*2次的io操作。所以合理的書寫sql,合理的使用分割槽是非常重要的。
Mysql的InnoDB引擎 4 表(2)
首先我們搞清楚約束和索引的區別,使用者建立了乙個唯一索引,意味著使用者建立了唯一約束。但是約束和索引的概念是不同的,約束更多是邏輯上的概念,用來保證資料的完整性,而索引是乙個資料結構,既有邏輯上的概念,還有物理上的儲存。在innodb儲存引擎表中,域完整性可以通過如下幾個途徑來保證 對於innodb...
MySQL的儲存引擎INNODB
1 一般情況下,mysql會預設提供多種儲存引擎,你可以通過下面的檢視 看你的mysql現在已提供什麼儲存引擎 mysql show engines 看你的mysql當前預設的儲存引擎 mysql show variables like storage engine 你要看某個錶用了什麼引擎 在顯示...
mysql的innodb儲存引擎
innodb是支援事務的儲存引擎,支援acid特性的acid 指資料庫事務正確執行的四個基本要素的縮寫 包含 原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 更適合處理大量的小事務,小事務正常都會被提交,很少會被回滾,在資料儲存的...