小貝_mysql分區理論學習,小貝_mysql理論學習
mysql分區簡要:一、為什麼需要mysql分區二、mysql分區的類型三、mysql分區技術對比
一、為什麼需要mysql分區
1、首先,業務資料增大時,必然會影響資料操作。通常針對大資料,有如下最佳化方法:
a、大表拆小表
b、sql語句最佳化
2、不足:
a、sql語句最佳化可以通過增加索引等來調整,但是隨著資料量增大時將會導致索引的維護代價增大
b、大表拆分小表可以在細分為垂直or水平分表。但是需要實現邏輯操作。即選擇那張表
3、總結: 針對大資料,添加索引會導致索引檔案大以及維護索引代價大,拆分表,就需要實現邏輯操作。因此,這裡需要用到mysql分區。分區其實從本質上也是實現了拆分小表的做法。是基於物理層面上進行拆分成小表,無須實現邏輯操作,對使用者而言是透明的。
二、mysql分區類型
1、range分區: 基於給定連續區間的列值,把多行分配給分區
2、list分區: 類似於按range分區,區別在於list分區是基於列值匹配一個離散值集合中的某個值來進行選擇
3、hash分區: 基於使用者定義的運算式的返回值來進行選擇的分區,該運算式使用將要插入到表中的這些行的列值進行計算,這個函數可以包含mysql中有效、產生非負整數值得任何錶達式
4、key分區: 類似於hash分區,區別在於key分區只支援計算一列或多列,且mysql伺服器提供自身的雜湊函數
總結: 使用優先順序 range>list>hash>key
hash一般用於測試分區
三、mysql分區技術對比
分區名稱 |
優點 |
缺點 |
共性 |
range |
適合與日期類型,支援複合分區 |
有限的分區 |
一般只針對某一列 |
list |
適合與有固定取值的列,支援複合分區 |
有限的分區,插入記錄在這一列的值不在list中,則資料丟失 |
一般只針對某一列 |
hash |
線性hash使得增加、刪除和合并分區更快捷 |
線性hash的資料分布不均勻,而一般hash的資料分布均勻 |
一般只針對某一列 |
key |
列可以為字串等其它非int類型 |
效率較之前的低,因為函數為複雜的函數如md5或sha函數 |
一般只針對某一列 |
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。