圖 1 大家還沒注意到我MySQL的分區功能也很強了哦
非整數列分區
任何使用過分區的人應該都遇到過不少問題,特別是面對非整數列分區時,MySQL 5.1只能處理整數列分區,如果你想在日期或字符串列上進行分區,你不得不使用函數對其進行轉換。
MySQL 5.5中新增了兩類分區方法,RANG和LIST分區法,同時在新的函數中增加了一個COLUMNS關鍵詞。我們假設有這樣一個表:
CREATE TABLE expenses (
expense_date DATE NOT NULL,
category VARCHAR(30),
amount DECIMAL (10,3) );
如果你想使用MySQL 5.1中的分區類型,那你必須將類型轉換成整數,需要使用一個額外的查找表,到了MySQL 5.5中,你可以不用再進行類型轉換了,如:
ALTER TABLE expenses PARTITION BY LIST COLUMNS (category) (
PARTITION p01 VALUES IN ( lodging, food),
PARTITION p02 VALUES IN ( flights, ground transportation),
PARTITION p03 VALUES IN ( leisure, customer entertainment),
PARTITION p04 VALUES IN ( communications),
PARTITION p05 VALUES IN ( fees) );
這樣的分區語句除了更加易讀外,對數據的組織和管理也非常清晰,上面的例子只對category列進行分區。
在MySQL 5.1中使用分區另一個讓人頭痛的問題是date類型(即日期列),你不能直接使用它們,必須使用YEAR或TO_DAYS轉換這些列,如:
/* 在MySQL 5.1中*/
CREATE TABLE t2
(
dt DATE
)
PARTITION BY RANGE (TO_DAYS(dt))
(
PARTITION p01 VALUES LESS THAN (TO_DAYS(2007-01-01)),
PARTITION p02 VALUES LESS THAN (TO_DAYS(2008-01-01)),
PARTITION p03 VALUES LESS THAN (TO_DAYS(2009-01-01)),
PARTITION p04 VALUES LESS THAN (MAXVALUE));
SHOW CREATE TABLE t2G
*************************** 1