創建MySQL分區表


要求: 表article每周一個分區,  Record_MD5_ID做唯一索引,  Time自動賦為當前時間
限制: 以時間Time來做分區字段, 字段類型不能為timestamp, 所以不能給當前默認時間, 表也不能有唯一索引及主鍵, 否則要作為分區鍵    
實現: 用觸發器來實現當前時間賦值, 將Record_MD5_ID插入到另外一個唯一表

用YearWeek()來作為分區函數, 會有問題, 導致查詢會全表掃描.

CREATE TABLE `table1` (
  `Article_Detail_ID` int(11) NOT NULL AUTO_INCREMENT,

     …


    `Record_MD5_ID` varchar(40) NOT NULL,
    `Time` datetime DEFAULT NULL,
  KEY `PRIMARYKeyID` (`Article_Detail_ID`),
  KEY `Inx_Record_Md5_ID` (`Record_MD5_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (YEARWEEK(Time))
(PARTITION P2011_39 VALUES LESS THAN (201139) ENGINE = InnoDB,
 PARTITION P2011_40 VALUES LESS THAN (201140) ENGINE = InnoDB,
 PARTITION P2011_41 VALUES LESS THAN (201141) ENGINE = InnoDB,
 PARTITION P2011_42 VALUES LESS THAN (201142) ENGINE = InnoDB,
 PARTITION P2011_43 VALUES LESS THAN (201143) ENGINE = InnoDB,
 PARTITION P2011_44 VALUES LESS THAN (201144) ENGINE = InnoDB,
 PARTITION P2011_45 VALUES LESS THAN (201145) ENGINE = InnoDB,
 PARTITION P2011_46 VALUES LESS THAN (201146) ENGINE = InnoDB,
 PARTITION P2011_47 VALUES LESS THAN (201147) ENGINE = InnoDB,
 PARTITION P2011_48 VALUES LESS THAN (201148) ENGINE = InnoDB,
 PARTITION P2011_49 VALUES LESS THAN (201149) ENGINE = InnoDB,
 PARTITION P2011_50 VALUES LESS THAN (201150) ENGINE = InnoDB,
 PARTITION P2011_51 VALUES LESS THAN (201151) ENGINE = InnoDB,
 PARTITION P2011_52 VALUES LESS THAN (201152) ENGINE = InnoDB,
 PARTITION P2011_53 VALUES LESS THAN (201153) ENGINE = InnoDB,
 PARTITION P2012_01 VALUES LESS THAN (201201) ENGINE = InnoDB,
 PARTITION P2012_02 VALUES LESS THAN (201202) ENGINE = InnoDB,
 ...
 PARTITION PMaxValue VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */;

CREATE TRIGGER `trg_article_record_md5` BEFORE INSERT ON `article` FOR EACH ROW BEGIN           
   INSERT INTO Record_MD5_ID_Unique SET Record_MD5_ID = NEW.Record_MD5_ID; 
   if NEW.Extracted_Time is null or NEW.Extracted_Time='' then
     SET NEW.Extracted_Time=NOW(); 
   end if;
END;


父分區為時間分區, 子分區為HASH MOD分區:

CREATE TABLE `table1` (
  `Stat_Article_ID` int(11) NOT NULL AUTO_INCREMENT,
  `Article_ID` int(11) NOT NULL,
  `Client_ID` int(11) NOT NULL,
  `Article_Extracted_Time` datetime NOT NULL,
  ...

  `Created_Time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  KEY `PRIMARYKeyID` (`Stat_Article_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 DELAY_KEY_WRITE=1 
/*!50500 PARTITION BY RANGE  COLUMNS(Article_Extracted_Time)
SUBPARTITION BY HASH (Mod(Client_ID, 10))
SUBPARTITIONS 10
(PARTITION P2011_10 VALUES LESS THAN ('2011-10-01') ENGINE = InnoDB,
 PARTITION P2011_11 VALUES LESS THAN ('2011-11-01') ENGINE = InnoDB,
 PARTITION P2011_12 VALUES LESS THAN ('2011-12-01') ENGINE = InnoDB,
 PARTITION P2012_01 VALUES LESS THAN ('2012-01-01') ENGINE = InnoDB,
 PARTITION P2012_02 VALUES LESS THAN ('2012-02-01') ENGINE = InnoDB,
 PARTITION P2012_03 VALUES LESS THAN ('2012-03-01') ENGINE = InnoDB,
 PARTITION P2012_04 VALUES LESS THAN ('2012-04-01') ENGINE = InnoDB,
 PARTITION P2012_05 VALUES LESS THAN ('2012-05-01') ENGINE = InnoDB,
 PARTITION P2012_06 VALUES LESS THAN ('2012-06-01') ENGINE = InnoDB,
 PARTITION P2012_07 VALUES LESS THAN ('2012-07-01') ENGINE = InnoDB,
 PARTITION P2012_08 VALUES LESS THAN ('2012-08-01') ENGINE = InnoDB,
 PARTITION P2012_09 VALUES LESS THAN ('2012-09-01') ENGINE = InnoDB,
 PARTITION P2012_10 VALUES LESS THAN ('2012-10-01') ENGINE = InnoDB,
 PARTITION P2012_11 VALUES LESS THAN ('2012-11-01') ENGINE = InnoDB,
 PARTITION P2012_12 VALUES LESS THAN ('2012-12-01') ENGINE = InnoDB,
 PARTITION P2013_01 VALUES LESS THAN ('2013-01-01') ENGINE = InnoDB,
 PARTITION P2013_02 VALUES LESS THAN ('2013-02-01') ENGINE = InnoDB,
 PARTITION P2013_03 VALUES LESS THAN ('2013-03-01') ENGINE = InnoDB,
 PARTITION PMaxValue VALUES LESS THAN (MAXVALUE) ENGINE = InnoDB) */;

 


時間分區:

CREATE TABLE `table1` (
 ....
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 
/*!50500 PARTITION BY RANGE  COLUMNS(Create_Date)
(PARTITION P2011_10 VALUES LESS THAN ('2011-10-01') ENGINE = InnoDB,
 PARTITION P2011_11 VALUES LESS THAN ('2011-11-01') ENGINE = InnoDB,
 PARTITION P2011_12 VALUES LESS THAN ('2011-12-01') ENGINE = InnoDB,
 PARTITION P2012_01 VALUES LESS THAN ('2012-01-01') ENGINE = InnoDB,
 PARTITION P2012_02 VALUES LESS THAN ('2012-02-01') ENGINE = InnoDB,
 PARTITION P2012_03 VALUES LESS THAN ('2012-03-01') ENGINE = InnoDB,
 PARTITION P2012_04 VALUES LESS THAN ('2012-04-01') ENGINE = InnoDB,
 PARTITION P2012_05 VALUES LESS THAN ('2012-05-01') ENGINE = InnoDB,
 PARTITION P2012_06 VALUES LESS THAN ('2012-06-01') ENGINE = InnoDB,
 PARTITION P2012_07 VALUES LESS THAN ('2012-07-01') ENGINE = InnoDB,
 PARTITION P2012_08 VALUES LESS THAN ('2012-08-01') ENGINE = InnoDB,
 PARTITION P2012_09 VALUES LESS THAN ('2012-09-01') ENGINE = InnoDB,
 PARTITION P2012_10 VALUES LESS THAN ('2012-10-01') ENGINE = InnoDB,
 PARTITION P2012_11 VALUES LESS THAN ('2012-11-01') ENGINE = InnoDB,
 PARTITION P2012_12 VALUES LESS THAN ('2012-12-01') ENGINE = InnoDB,
 PARTITION P2013_01 VALUES LESS THAN ('2013-01-01') ENGINE = InnoDB,
 PARTITION P2013_02 VALUES LESS THAN ('2013-02-01') ENGINE = InnoDB,
 PARTITION P2013_03 VALUES LESS THAN ('2013-03-01') ENGINE = InnoDB,
 PARTITION P2013_04 VALUES LESS THAN ('2013-04-01') ENGINE = InnoDB,
 PARTITION P2013_05 VALUES LESS THAN ('2013-05-01') ENGINE = InnoDB,
 PARTITION PMaxValue VALUES LESS THAN (MAXVALUE) ENGINE = InnoDB) */;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM