【轉】mysql的分割槽和分表
阿新 • • 發佈:2019-01-12
地址:https://www.cnblogs.com/phpshen/p/6198375.html
分割槽
分割槽就是把一個數據表的檔案和索引分散儲存在不同的物理檔案中。
mysql支援的分割槽型別包括Range、List、Hash、Key,其中Range比較常用:
- RANGE分割槽:
基於屬於一個給定連續區間的列值,把多行分配給分割槽。 - LIST分割槽:
類似於按RANGE分割槽,區別在於LIST分割槽是基於列值匹配一個離散值集合中的某個值來進行選擇。 - HASH分割槽:
基於使用者定義的表示式的返回值來進行選擇的分割槽,該表示式使用將要插入到表中的這些行的列值進行計算。這個函式可以包含MySQL 中有效的、產生非負整數值的任何表示式。 - KEY分割槽:
類似於按HASH分割槽,區別在於KEY分割槽只支援計算一列或多列,且MySQL伺服器提供其自身的雜湊函式。必須有一列或多列包含整數值。
分表
分表和分割槽類似,區別是,分割槽是把一個邏輯表文件分成幾個物理檔案後進行儲存,而分表則是把原先的一個表分成幾個表。進行分表查詢時可以通過union或者檢視。
分表又分垂直分割和水平分割,其中水平分分割最為常用。水平分割通常是指切分到另外一個數據庫或表中。
分表前應該儘量按照實際業務來分表,參考依據就是哪些欄位在查詢中起到作用,那就這些欄位來分表,並且需要在分表前就估算好規模,也就是先確定好規則在分表。
對於分表後的操作,依然是聯合查詢,檢視等基本操作,或者使用merge引擎合併資料並在此表中查詢。複雜一些操作需要藉助儲存過程來完成,藉助外部工具實現對分表的管理。
對於比較龐大的資料,不論是否進行分表,都必須考慮功能和效率的平衡性,並在功能上做出讓步。我們不能事事遷就使用者,而應該對某些影響效率的功能做出限制。例如移動公司的180天限制、論壇禁止對老帖進行回覆等。