深入瞭解MySQL 5.5分區功能增強

圖 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

發佈留言