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