資料量一多時,為了要達到良好的 performance 與 availability,就要把資料進行Partitions
Partitions 大致上可分為
Horizontal partitioning(水平分區)又稱為 shard
將不同的資料行存放在成數個不同的表,ex:資料以年的方式存放,每一年為一個表格。
Vertical partitioning (垂直分區)
將不同的欄位存放在不同的表中,ex.某幾個欄位不經常被訪問而且格式又大的時候,往往會透過這種方式來做分區,不但能保證它們數據相關性的同時還能提高訪問速度。
Mysql 5.1 以前,要做水平分區,必須仰賴工程師,人工劃分並且將資料分別寫到不同的資料表中。
Ex: 以ID 進行MD5 取特定幾碼作為分區碼
send_mail_log_00….send_mail_log_ff
Mysql 5.1 增加了水平分區的功能,也就是在創建好資料表後,決定分區的方式,由Mysql控制資料流
Mysql 5.1提供了以下幾種方式分區
Range (範圍):比方說 ID 0~5000第一區 5000~10000第二區…..以此類推
Hash (雜湊) :決定好一個鍵值,Mysql會依照鍵值做Hash,然後分類
Key (鍵值):Hash的延伸,由Mysql自行產生Hash Key
List (列表) :根據定義的列表的值所對應的行數據進行分割
Composite(複合):可以依據需求使用不同的分區類別(包含兩個或以上的分區類型)
ps.分區限制最大為1024
有興趣可以參考下面的文章
http://article.denniswave.com/6320
官方說明文件:http://dev.mysql.com/doc/refman/5.1/en/partitioning.html