zoukankan      html  css  js  c++  java
  • mysql 普通表转分区表

    1.按照现有表结构,创建一个临时表,用于分区表转换
    mysql> desc ClientActionTrack;
    +---------------+---------------+------+-----+---------+----------------+
    | Field         | Type          | Null | Key | Default | Extra          |
    +---------------+---------------+------+-----+---------+----------------+
    | sn            | bigint(20)    | NO   | PRI | NULL    | auto_increment |
    | clientSn      | int(11)       | YES  |     | NULL    |                |
    | ip            | varchar(32)   | YES  |     | NULL    |                |
    | url           | varchar(1000) | YES  |     | NULL    |                |
    | httpMethod    | varchar(100)  | YES  |     | NULL    |                |
    | requestParams | text          | YES  |     | NULL    |                |
    | requestHeader | varchar(2000) | YES  |     | NULL    |                |
    | pageUrl       | varchar(500)  | YES  |     | NULL    |                |
    | sessionId     | varchar(100)  | YES  |     | NULL    |                |
    | startTime     | datetime      | YES  |     | NULL    |                |
    | completeTime  | datetime      | YES  |     | NULL    |                |
    +---------------+---------------+------+-----+---------+----------------+
    11 rows in set (0.01 sec)
    
    mysql>  select clientSn,httpMethod,startTime from ClientActionTrack limit 5;
    +----------+------------+---------------------+
    | clientSn | httpMethod | startTime           |
    +----------+------------+---------------------+
    |     NULL | POST       | 2015-09-14 10:54:57 |
    |     NULL | POST       | 2015-09-14 10:54:57 |
    |     NULL | POST       | 2015-09-14 10:54:57 |
    |     NULL | POST       | 2015-09-14 10:54:57 |
    |     NULL | POST       | 2015-09-14 10:54:57 |
    +----------+------------+---------------------+
    5 rows in set (0.00 sec)
    
    
    mysql> CREATE TABLE `tmp01` (
        ->   `sn` bigint(20) NOT NULL AUTO_INCREMENT,
        ->   `clientSn` int(11) DEFAULT NULL,
        ->   `ip` varchar(32) DEFAULT NULL,
        ->   `url` varchar(1000) DEFAULT NULL COMMENT 'request url',
        ->   `httpMethod` varchar(100) DEFAULT NULL COMMENT 'http method',
        ->   `requestParams` text COMMENT '请求参数',
        ->   `requestHeader` varchar(2000) DEFAULT NULL COMMENT '请求头信息',
        ->   `pageUrl` varchar(500) DEFAULT NULL COMMENT '页面Url',
        ->   `sessionId` varchar(100) DEFAULT NULL COMMENT 'session的Id',
        ->   `startTime` datetime DEFAULT NULL COMMENT '访问开始时间',
        ->   `completeTime` datetime DEFAULT NULL COMMENT '访问完成时间',
        ->   PRIMARY KEY (`sn`)
        -> ) ENGINE=InnoDB AUTO_INCREMENT=302753 DEFAULT CHARSET=utf8 COMMENT='用户访问记录表'
        -> partition by RANGE (startTime)  (PARTITION  p20150101 values less than (20150102));  
    	
    ERROR 1659 (HY000): Field 'startTime' is of a not allowed type for this type of partitioning
    
    mysql> select min(startTime),max(startTime) from ClientActionTrack;
    +---------------------+---------------------+
    | min(startTime)      | max(startTime)      |
    +---------------------+---------------------+
    | 2015-09-14 10:54:57 | 2015-10-27 15:12:00 |
    +---------------------+---------------------+
    1 row in set (0.97 sec)
    
    CREATE TABLE `tmp01` (
      `sn` bigint(20) NOT NULL AUTO_INCREMENT,
      `clientSn` int(11) DEFAULT NULL,
      `ip` varchar(32) DEFAULT NULL,
      `url` varchar(1000) DEFAULT NULL COMMENT 'request url',
      `httpMethod` varchar(100) DEFAULT NULL COMMENT 'http method',
      `requestParams` text COMMENT '请求参数',
      `requestHeader` varchar(2000) DEFAULT NULL COMMENT '请求头信息',
      `pageUrl` varchar(500) DEFAULT NULL COMMENT '页面Url',
      `sessionId` varchar(100) DEFAULT NULL COMMENT 'session的Id',
      `startTime` datetime DEFAULT NULL COMMENT '访问开始时间',
      `completeTime` datetime DEFAULT NULL COMMENT '访问完成时间',
      PRIMARY KEY (`sn`,`startTime`)
    ) ENGINE=InnoDB AUTO_INCREMENT=302753 DEFAULT CHARSET=utf8 COMMENT='用户访问记录表'
    partition by RANGE (TO_DAYS(startTime))  (PARTITION  p20150914 values less than (736221)); 
    
    主键列增加 数据被放大
    
    2.批量生成分区表
    export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
    date=`echo $1 | tr -d '-'`
    date1=`echo $2 | tr -d '-'`
    date2=`echo $1`
    date_end=`get_date $2 +1 | tr -d '-'`
    while :
        do
          #echo $date
          date3=`get_date $date +1`
          var=`perl ./get_date.pl $date3`
         echo "alter table tmp01 add partition (partition p$date values less than ($var));"
          date2=`get_date $date +1`
          date=`echo $date2 | tr -d '-'`
          #echo $date3
    if [ "$date" = "$date_end" ]
           then
            exit
    fi
    done
    You have mail in /var/spool/mail/oracle
    oadb01:/home/oracle/mysql> sh ./p1.sh 20150914 20151231 >p1.sql
    
    
    3.mysql> insert into tmp01 select * from ClientActionTrack;  ---插入数据到临时表
    
    
    4.删除旧表,rename tmp01为ClientActionTrack;
    mysql> drop table ClientActionTrack;
    Query OK, 0 rows affected (0.24 sec)
    
    mysql> rename table  tmp01 to ClientActionTrack;
    
    5.访问分区:
    
    
    以前的查询方式:
    select min(startTime),max(startTime) from ClientActionTrack where starttime >='2015-10-02 00:00:00' and starttime<='2015-10-02 23:59:59'
    
    改造成分区后:
    
    SELECT min(startTime),max(startTime) FROM ClientActionTrack PARTITION (p20151002);
    

  • 相关阅读:
    phpexcel Could not open for reading! File does not exist.
    tp5 微信JSAPI支付
    ajax返回数据不跳success
    tp5 paginate带参翻页
    php 小程序 前后端POST通信
    小程序页面跳转不同方法
    小程序添加购物车
    小程序商城数量加减效果
    Include conf/extra/httpd-ssl.conf apache 无法启动
    SQL 实验详细源码参考
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351179.html
Copyright © 2011-2022 走看看