背景:當乙個表的資料量到了百萬,千萬級別的時候,資料讀取和資料的插入效率將會十分低下,如果還涉及到多表聯查的話,效率驚人的低下。
1,分割槽:
<1>.概念:將資料表中的資料分段劃分在不同的位置存放;位置可以是同一塊磁碟,也可以是不同的磁碟或者不同的mysql伺服器;分割槽之後,表面上還是乙個表,但是資料雜湊在不同的位置上,對於磁碟的讀取就會分離開來,減少了單個磁碟的i/o開銷,這樣就是提高資料庫的效能;注意:mysql 分割槽會將null欄位作為0或者最小的值進行處理。
<2>.型別:
《a》range分割槽:基於乙個給定的連續區間範圍,把資料分配到不同的分割槽;區間要連續而且不同重疊,使用values less than 操作進行定義;如
mysql > create table test (
-> id int not null,
-> name chaer nou null,
-> age int not null,
-> store_id int not null
-> )
-> partition by range (columns->適用於菲整數分割槽)(store_id)(
-> partition p0 values less than (10),
-> partition p1 values less than (20),
-> partition p2 values less than (30)
-> );
在建立好如上分割槽之後,我們可以用如下語句給store_id>30的資料建立第四個分割槽:
alter table test add partition (partition p4 values less than maxvalue);
mysql 5.1之後還支援對於非整數分割槽,使用的是range columns語句;
《b》list分割槽:類似於range分割槽,區別在於list分割槽時基於列舉出的值列表分割槽,range分割槽時基於給定的連續區間範圍分割槽;使用partition by list 子句來實現,如下:
mysql > create table test (
-> id int not null,
-> name chaer nou null,
-> age int not null,
-> store_id int not null
-> )
-> partition by list (store_id)(
-> partition p0 values in (3,5),
-> partition p1 values in (20,6),
-> partition p2 values in (2,8)
-> );
但是list分割槽必須注意的是必須能在in裡面匹配到資料,否則會報錯;這個區別於range分割槽;
《c》colunns分割槽:
只能適用於mysql5.5之後,其實這個分割槽主要是解決range 和 list分割槽不能使用非整形資料列進行分割槽而產生的,但是他的功能不僅僅如此;因為他還支援多列分割槽;如下
mysql > create table test (
-> a int not null,
-> b int nou null
-> )
-> partition by range columns (a,b)(
-> partition p0 values less than (0,10),
-> partition p1 values less than (20,20),
-> partition p2 values less than (30,15)
-> partition p2 values less than (10,maxvalue),
-> partition p2 values less than (maxvalue
,maxvalue)
-> );
《d》hash分割槽:
主要用來分散熱點讀,確保資料在預先確定個數的分割槽中盡可能平均分配,當我們對乙個資料表分割槽的時候,mysql會對分割槽鍵應用乙個雜湊函式,以此來確定資料應當放在n個分割槽的哪個分割槽中。mysql支援兩種hash分割槽,常規分割槽和線性分割槽,常規分割槽使用的是取模演算法,線性分割槽使用的是乙個線性的2的冪的運算法則。分割槽如下:
mysql > create table test (
-> id int not null,
-> name chaer nou null,
-> age int not null,
-> store_id int not null
-> )
-> partition by(linear:線性分割槽) hash(store_id) partition 4;
該分割槽會將資料表store_id欄位根據取模演算法獲取2的冪的運算分為4個分割槽;
《e》key分割槽:
類似於hash分割槽,不同之處在於hash分割槽可以使用自己的表示式,而key分割槽只能使用mysql伺服器提供的hash函式,同時hash分割槽只支援整數型別,但是key分割槽支援除了blob和text型別之外的所有字段型別;如下:
mysql > create table test (
-> id int not null,
-> name chaer nou null,
-> age int not null,
-> store_id int not null
-> )
-> partition by key (linear:線性分割槽)
(store_id) partition 4;
同時key分割槽你可以不指定分割槽鍵,缺省會使用主鍵進行分割槽,如果沒有主鍵,會使用非空唯一鍵作為分割槽鍵。線性分割槽類似於hash分割槽,但是如果資料表沒有主鍵也沒有非空唯一鍵那就必須指定分割槽鍵。
《e》子分割槽:
就是在分割槽的基礎上在進行一次分割槽,又稱為復合分割槽;
資料庫分割槽
分割槽 就是把一張表的資料分成n個區塊 資料分割槽是一種物理資料庫的設計技術,它的目的是為了在特定的sql操作中減少資料讀寫的總量以縮減響應時間。分割槽並不是生成新的資料表,而是將表的資料均衡分攤到不同的硬碟,系統或是不同伺服器儲存介子中,實際上還是一張表。特性 分割槽能夠提高併發性和並行性 從而增...
資料庫分割槽
分割槽就是把乙個資料表的檔案和索引分散儲存在不同的物理檔案中。建立乙個user 表 以id進行分割槽 id 小於10的在user 1分割槽id小於20的在user 2分割槽 create table user id int not null auto increment,username varch...
巨杉資料庫SequoiaDB 資料分割槽操作例項
為了進一步幫助使用者更好地理解和使用資料分割槽,本文件通過以下操作例項進行解釋說明。以下例項均使用 shell 工具進行操作。使用範圍分割槽方式做資料庫分割槽 在集合 sample.employee 中,將 create date 字段範圍在 201801,201901 中的資料切分到複製組 gro...