mysql分割槽實踐 MySQL分割槽表實踐

2021-10-17 22:41:00 字數 2439 閱讀 4260

允許根據可以設定為任意大小的規則,跨檔案系統分配單個表的多個部分。實際上,表的不同部分在不同的位置被儲存為單獨的表。使用者

mysql分割槽概述:

允許根據可以設定為任意大小的規則,跨檔案系統分配單個表的多個部分。實際上,表的不同部分在不同的位置被儲存為單獨的表。使用者所選擇的、實現資料分割的規則被稱為分割槽函式,這在mysql中它可以是模數,或者是簡單的匹配乙個連續的數值區間或數值列表,或者是乙個內部hash函式,或乙個線性hash函式。函式根據使用者指定的分割槽型別來選擇,把使用者提供的表示式的值作為引數。該表示式可以是乙個整數列值,或乙個作用在乙個或多個列值上並返回乙個整數的函式。[z1] 。這個表示式的值傳遞給分割槽函式,分割槽函式返回乙個表示那個特定記錄應該儲存在哪個分割槽的序號。這個函式不能是常數,也不能是任意數。它不能包含任何查詢,但是實際上可以使用mysql 中任何可用的sql表示式,只要該表示式返回乙個小於maxvalue(最大可能的正整數)的正數值。

由於mysql無全域性索引的概念,只有本地分割槽索引,基於此種原因,乙個表中如果有2個或2個以上的唯一索引,此表無法分割槽。分割槽函式應用的資料庫的列必須是mysql的主鍵,否則不能分割槽。[z2]

對於建立了分割槽的表,可以使用你的mysql 伺服器所支援的任何儲存引擎。在mysql 5.1版中,同乙個分割槽表的所有分割槽必須使用同乙個儲存引擎;例如,不能對乙個分割槽使用myisam,而對另乙個使用innodb。但是,這並不妨礙在同乙個 mysql 伺服器中,甚至在同乙個資料庫中,對於不同的分割槽表使用不同的儲存引擎。

mysql分割槽的建立

mysql可以建立四種分割槽型別的分割槽:

range 分割槽:基於屬於乙個給定連續區間的列值,把多行分配給分割槽。詳情參見18.2.1節,「range分割槽」。

· list 分割槽:類似於按range分割槽,區別在於list分割槽是基於列值匹配乙個離散值集合中的某個值來進行選擇。詳情參見18.2.2節,「list分割槽」。

· hash分割槽:基於使用者定義的表示式的返回值來進行選擇的分割槽,該表示式使用將要插入到表中的這些行的列值進行計算。這個函式可以包含mysql 中有效的、產生非負整數值的任何表示式。詳情參見18.2.3節,「hash分割槽」。

· key 分割槽:類似於按hash分割槽,區別在於key分割槽只支援計算一列或多列,且mysql 伺服器提供其自身的雜湊函式。必須有一列或多列包含整數值。詳情參照:18.2.4. key分割槽。

子分割槽:子分割槽是分割槽表中每個分割槽的再次分割。書寫格式參照:18.2.5. 子分割槽

(1)關於子分割槽應注意的地方: 每個分割槽必須有相同數量的子分割槽。

· (2)如果在乙個分割槽表上的任何分割槽上使用subpartition 來明確定義任何子分割槽,那麼就必須定義所有的子分割槽。

在建立分割槽的時候可以指定分割槽的資料儲存位置和索引位置,這樣可以跨磁碟或者檔案系統儲存不同的資料。資料分磁碟儲存可以一定程度上增加資料讀取速度,因為採用多磁碟後,每個磁碟的i/o操作會降低。而且採用指定分割槽儲存位置能夠增大儲存量。

無論使用何種型別的分割槽,分割槽總是在建立時就自動的順序編號,且從0開始記錄,記住這一點非常重要。當有一新行插入到乙個分割槽表中時,就是使用這些分割槽編號來識別正確的分割槽。例如,如果你的表使用4個分割槽,那麼這些分割槽就編號為0, 1, 2, 和3。對於range和list分割槽型別,確認每個分割槽編號都定義了乙個分割槽,很有必要。對hash分割槽,使用的使用者函式必須返回乙個大於0的整數值。對於key分割槽,,這個問題通過mysql伺服器內部使用的 雜湊函式自動進行處理。注意:分割槽的名字是不區分大小寫的,且對於range分割槽和list分割槽,分割槽的名稱是不能重複的。這幾種可根據不同的需求來選擇,比較常用的是range分割槽。

常用的mysql的分割槽管理:

range 和list分割槽管理

分割槽對於程式來說是透明的,而且只有刪除能在分割槽層面上操作,其他如查詢、修改、增加都不能指定分割槽。

alter table …droppartition ….(刪除分割槽)

alter table … add partition (partition p3 valuesless than (…));[z3] 增加分割槽

alter table ... reorganize partition …,… into (

partition p0 values less than (…)

);[z4] 合併拆分分割槽。

hash和key分割槽管理

新增分割槽和range、list分割槽方式相同,對於修改分割槽,不能使用與從按照range或list分割槽的表中刪除分割槽相同的方式,來從hash或key分割槽的表中刪除分割槽。但是,可以使用「altertable ... coalesce partition」命令來合併hash或key分割槽。

如果要檢視分割槽的資訊,可以通過sql語句來查詢

mysql 分表分割槽

一 分表 1 垂直分割 就是將乙個表按照欄位來分,每張表保證有相同的主鍵就好。一般來說,將常用字段和大字段分表來放。優勢 比沒有分表來說,提高了查詢速度,降低了查詢結果所用記憶體 劣勢 沒有解決大量記錄的問題,對於單錶來說隨著記錄增多,效能還是下降很快 2 水平分割 水平分割是企業最常用到的,水平拆...

mysql分表與分割槽

1 首先得確認mysql是否支援分割槽功能,這可以通過命令 show plugins 檢視如果顯示如下,則說明你的mysql版本支援partition 2 innodb一般用於具有事務和外來鍵的場合,它預設將所有的表資料和索引檔案放在乙個名為ibdata1的檔案中,屬於共享表空間。myisam預設每...

MySQL分割槽和分表

1.分割槽的型別 1 range 把連續區間按範圍劃分 例 create table user id int 11 money int 11 unsigned not null,date datetime partition by range year date partition p2014 va...