分區是一種表的設計模式。通常,表分區是根據條件將一個大表分為幾個小表。 但是對于應用程序來說,分區表與沒有分區的表是相同的。換句話說,分區對應用程序是透明的,但是數據庫卻會重新排列數據。在進行的項目中,我們需要保存大量的、有效的數據,為了提高查詢效率并快速刪除過期數據,我們選擇了MySQL分區機制。那么MySQL數據庫如何對表進行分區?
分區類型
1.Range分區:最為常用,基于屬于一個給定連續區間的列值,把多行分配給分區。最常見的是基于時間字段。基于分區的列最好是整型,如果日期型的可以使用函數轉換為整型。
2.List分區:LIST分區和RANGE分區類似,區別在于LIST是枚舉值列表的集合,RANGE是連續的區間值的集合。
3.Hash分區:基于給定的分區個數,將數據分配到不同的分區,HASH分區只能針對整數進行HASH,對于非整形的字段只能通過表達式將其轉換成整數。
4.Key分區:KEY分區其實跟HASH分區差不多,不同點如下:
(1)KEY分區允許多列,而HASH分區只允許一列。
(2)如果在有主鍵或者唯一鍵的情況下,key中分區列可不指定,默認為主鍵或者唯一鍵,如果沒有,則必須顯性指定列。
(3)KEY分區對象必須為列,而不能是基于列的表達式。
(4)KEY分區和HASH分區的算法不一樣,PARTITION BY HASH (expr),MOD取值的對象是expr返回的值,而PARTITION BY KEY (column_list),基于的是列的MD5值。
分區命令
創建分區
創建后可以看到,每個分區都會對應1個ibd文件
注意事項
1.MySQL分區中如果存在主鍵或唯一鍵,則分區列必須包含在其中(否則判斷主鍵或唯一時,需要掃描所有分區);
2.分區字段不能為NULL,要不然怎么確定分區范圍呢,所以盡量NOT NULL;
3.最大分區數目不能超過1024;
4.不支持外鍵;
5.只能對數據表的整型列進行分區,或者數據列可以通過分區函數轉化成整型列;
6.分區表不影響自增列。
常見問題
1.A PRIMARY KEY must include all columns in the table's partitioning function:這樣的話判斷主鍵是否唯一就可以在單個分區內部完成,否則就需要跨所有的分區;
2.MAXVALUE can only be used in last partition definition:RANGE表分區后不能帶MAXVALUE分區,否則無法增加分區。或者就只能重新分區了;
3.Table has no partition for value 737425:因為分區的范圍沒有包含所有可能的記錄的值。
到此這篇關于MySQL數據庫是如何分區表的文章就介紹到這了,更多相關MySQL數據庫分區表的內容,請繼續關注中培偉業。