1、分表:數據庫
水平分表:根據條件把數據分爲N個表(例如:商品表中有月份列,則能夠按月份進行水平分表)。服務器
使用場景:一張表中數據太多,查詢效率太慢。併發
當須要同時查詢被水平分表的多張表時:函數
在兩條SQL語句中間加union,就能把兩表數據合併展現。性能
union:數據合併時去重。優化
Union all:數據合併展現不去重。spa
垂直分表:將表的字段拆出來變成一張表,兩表經過外鍵創建一對一關係。it
使用場景:有些表記錄數並很少,可是字段卻很長,表佔用空間很大,檢索表時須要執行大量I/O,嚴重下降了性能。io
當須要同時用到兩表的數據時,能夠經過 left join 進行兩表查詢。效率
2、分庫:(配置多數據源)
垂直分庫:根據不一樣業務將不一樣的表分到不一樣的數據庫。
水平分庫:將同一張表中的數據分到不一樣的數據庫中。
3、分區:
表沒變,可是保存表數據的從一個文件被分紅了多個文件,用戶感知不到。
分區的做用:
select *f rom dept where id in (1m2,3,4)
從MySQL 5.1 中新增了分區(Partition)功能,優點也愈來愈明顯了:
--與單個磁盤或文件系統分區相比,能夠存儲更多的數據
--很容易就能刪除不用或者過期的數據
--一些查詢能夠獲得極大的優化 能夠併發查詢
--涉及到 SUM()/COUNT() 等聚合函數時,能夠併發進行
--IO吞吐量更大(多臺服務器)
分區的方式:
常見分區方式:
Range(範圍) –基於一個給定的連續空間,把數據分配到不一樣分區。1-10 11-20
List(預約義列表) –相似Range分區,區別在List分區是基於枚舉出的值列表分區,而 Range分區是根據給定的連續區間範圍分區 1,2,3 4,5,6
Hash(哈希)–這中模式容許經過對錶的一個或多個列的Hash Key進行計算,最後經過這個Hash碼不一樣數值對應的數據區域進行分區。例如能夠創建一個對錶主鍵進行分 區的表。這個根據給定的分區個數,把數據分配到不一樣的分區。
Key(鍵值)-上面Hash模式的一種延伸,這裏的Hash Key是MySQL系統產生的。