• 创建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) */;
  • 相关阅读:
    Kubernetes之Ingress-Nginx
    Prometheus之AWS-EC2自动发现
    Prometheus之kubernetes-sd自动发现
    ORACLE 遇到ORA 03113 数据库连接卡住
    ORACLE 遇到ORA-31693 ORA-31617 ORA-19505 ORA-27037
    Oracle 计划任务批量清理临时表实例
    GO 基础
    CentOS 7.3安装完整开发环境
    3.6 String 与 切片&str的区别
    ubantu上编辑windows程序
  • 原文地址:https://www.cnblogs.com/krisy/p/2793070.html
Copyright © 2020-2023  润新知