mysql分區表整理

1. 什麼是分區表?數據庫

分區表,是指根據必定規則,將數據庫中的一張表分解成多個更小的,容易管理的部分。從邏輯上看,只有一張表,可是底層倒是由多個物理分區組成。服務器

2,分區表原理。函數

存儲引擎管理分區的各個底層表和管理普通表同樣,全部底層表都必須使用相同的引擎,從存儲引擎來看,底層表和普通表麼有任何不一樣。對用戶來講,分區表是一個獨立的邏輯表,可是底層由多個物理子表組成。實現分區的代碼其實是對一組底層表句柄對象的封裝,對分區表的請求,都會經過句柄對象轉化成對存儲引擎的接口調用。分區對SQL層來講是一個徹底封裝底層實現的黑盒子,對應用層是透明的
3.應用場景
當數據量很是大時(表的容量到達GB或者是TB),若是仍然採用索引的方式來優化查詢,因爲索引本生的消耗以及大量的索引碎片的產生,查詢的過程會致使大量的隨機I/O的產生,分區表能夠分佈在不一樣物理設備上,避免某些特殊的瓶頸,能夠對某個分區進行獨立恢復備份。優化

4,分區表優勢spa

1)分區表的數據能夠分佈在不一樣的物理設備上,從而高效地利用多個硬件設備。
2)和單個磁盤或者文件系統相比,能夠存儲更多數據
3)優化查詢。在where語句中包含分區條件時,能夠只掃描一個或多個分區表來提升查詢效率;涉及sum和count語句時,也能夠在多個分區上並行處理,最後彙總結果。
4)分區表更容易維護。例如:想批量刪除大量數據能夠清除整個分區。
5)可使用分區表來避免某些特殊的瓶頸對象

5,分區表的限制因素索引

1)一個表最多隻能有1024個分區
2) MySQL5.1中,分區表達式必須是整數,或者返回整數的表達式。在MySQL5.5中提供了非整數表達式分區的支持。
3)若是分區字段中有主鍵或者惟一索引的列,那麼多有主鍵列和惟一索引列都必須包含進來。即:分區字段要麼不包含主鍵或者索引列,要麼包含所有主鍵和索引列。
4)分區表中沒法使用外鍵約束
5)MySQL的分區適用於一個表的全部數據和索引,不能只對表數據分區而不對索引分區,也不能只對索引分區而不對錶分區,也不能只對表的一部分數據分區。接口

6. MySQL支持的分區類型hash

1,range分區:
按照RANGE分區的表是經過以下一種方式進行分區的,每一個分區包含那些分區表達式的值位於一個給定的連續區間內的行。
2,list分區:
LIST分區中每一個分區的定義和選擇是基於某列的值從屬於一個值列表集中的一個值,而RANGE分 區是從屬於一個連續區間值的集合。
3,hash分區:
HASH分區主要用來確保數據在預先肯定數目的分區中平均分佈,你所要作的只是基於將要被哈希的列值指定一個列值或表達式,以 及指定被分區的表將要被分割成的分區數量。
4,key分區:
按照KEY進行分區相似於按照HASH分區,除了HASH分區使用的用 戶定義的表達式,而KEY分區的 哈希函數是由MySQL 服務器提供。
5,子分區:it

子分區是分區表中每一個分區的再次分割,子分區既可使用HASH希分區,也可使用KEY分區。這 也被稱爲複合分區(composite partitioning)。

相關文章
相關標籤/搜索