MySQL分區
是什麼
根據一定邏輯規則,將一個表拆成多個更小更容易管理的部分,邏輯上還是隻有一張表,但是實際上確有多個物理分區對象組成。
爲什麼
1、分區可以在一個表中存儲比單個磁盤或文件系統分區上的數據更多的數據,因爲我們可以將分區表存儲在不同物理磁盤上
2、對已過期或者不需要保存的數據,可以通過刪除與這些數據有關的分區來快速刪除數據,他的效率遠比delete高;
3、優化查詢,在where子句中包含分區條件時,可以只掃描必要的一個或者多個分區來提高查詢效率;例如下面語句:
SELECT * FROM t PARTITION(p0,p1)WHERE c <5僅選擇與WHERE條件匹配的分區p0和p1中的那些行。
在這種情況下,MySQL不檢查表t的任何其他分區;
4、涉及聚合函數SUM()、COUNT()的查詢時,可以容易的在每個分區上並行處理,例如在執行下面這條語句:
SELECT salesperson_id,COUNT(orders)as order_total FROM sales GROUP BY salesperson_id ;會在每個分區上都同時運行查詢;
5、憑藉在多個磁盤上傳播數據,實現更高的查詢吞吐量。
怎麼幹
有以下四種分區類型:
RANGE分區:基於一個給定連續區間範圍,把數據分配到不同的分區;
LIST分區:類似RANGE分區,區別在LIST分區是基於枚舉出的值列表分區,RANGE是基於給定連續區間範圍分區;
HASH分區:基於用戶定義的表達式返回值來選擇分區,該表達式對要插入到表的行中列值操作;
KEY分區:類似HASH,但是HASH允許使用用戶自定義表達式,而KEY分區不允許,它需要使用MySQL服務器提供的HASH函數,同時HASH分區只支持整數分區,而KEY分區支持除BLOB和TEXT類型外其他列;