圖 1 大傢還沒註意到我MySQL的分區功能也很強瞭哦
非整數列分區
任何使用過分區的人應該都遇到過不少問題,特別是面對非整數列分區時,MySQL 5.1隻能處理整數列分區,如果你想在日期或字符串列上進行分區,你不得不使用函數對其進行轉換。
MySQL 5.5中新增瞭兩類分區方法,RANG和LIST分區法,同時在新的函數中增加瞭一個COLUMNS關鍵詞。我們假設有這樣一個表:
<!–
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
–>CREATE TABLE expenses (
expense_date DATE NOT NULL,
category VARCHAR(30),
amount DECIMAL (10,3) );
如果你想使用MySQL 5.1中的分區類型,那你必須將類型轉換成整數,需要使用一個額外的查找表,到瞭MySQL 5.5中,你可以不用再進行類型轉換瞭,如:
<!–
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
–>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轉換這些列,如:
<!–
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
–>/* 在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<span styl