Mysql如何建立表分区

(1)、查看表分区

SELECT
      partition_name part, 
      partition_expression expr, 
      partition_description descr, 
      FROM_DAYS(partition_description) lessthan_sendtime, 
      table_rows 
    FROM
      INFORMATION_SCHEMA.partitions 
    WHERE
      TABLE_SCHEMA = SCHEMA() 
      AND TABLE_NAME='rpt_office_lvl'; ---这里是表名

      
 (2)、给已建的表增加分区

 ALTER TABLE test_rpt_office_lvl
    PARTITION BY RANGE COLUMNS(data_date) ( 
    PARTITION trol_201708 VALUES LESS THAN ('2017-09-01'),
    PARTITION trol_201709 VALUES LESS THAN ('2017-10-01'),
    PARTITION trol_201710 VALUES LESS THAN ('2017-11-01')
    );


  (3)、删除分区

alter table test_rpt_office_lvl drop PARTITION trol_201711,trol_201712,trol_201801;

 

  (4)、利用存储过程自动创建表分区

     以下是按月分区

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Procedure structure for `SP_TABLE_PARTITION_AUTO`
-- ----------------------------
DROP PROCEDURE IF EXISTS `SP_TABLE_PARTITION_AUTO`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `SP_TABLE_PARTITION_AUTO`(tableName varchar(30),dataDate varchar(7),tempName varchar(10))
BEGIN
	# 自动给表建立分区,建下个月的分区
	# tableName:表名 dataDate:数据日期   tempName:分区前缀  

  set @curYear = SUBSTR(dataDate,1,4);

	set @curMonth = SUBSTR(dataDate,6,2);

	set @parYear = '';

	set @parMonth = '';

	if @curMonth = '11' then 
			set @parYear = @curYear +1;
			set @parMonth = '01';
	elseif @curMonth = '12' then 
			set @parYear = @curYear +1;
			set @parMonth = '02';
	ELSE
			set @parYear = @curYear;
			set @parMonth = @curMonth +2;
			if @parMonth < 10 THEN
				 set @parMonth = CONCAT('0',@parMonth);
			end if;
	end if;
	
	if @curMonth = '12' then 
			set @curYear = @curYear +1;
			set @curMonth = '01';
	ELSE
			set @curMonth = @curMonth +1;
			if @curMonth < 10 THEN
				 set @curMonth = CONCAT('0',@curMonth);
			end if;
	end if;
	
#select @curYear as 'curYear',@curMonth as 'curMonth',@parYear as 'parYear',@parMonth as 'parMonth';


	set @sqlStr = CONCAT('ALTER TABLE ',tableName,' add PARTITION ( PARTITION ',tempName,'_',@curYear,@curMonth,
			' VALUES LESS THAN (\'',@parYear,'-',@parMonth,'-','01','\'))');

	PREPARE stmt FROM @sqlStr;  
	EXECUTE stmt; 

END
;;
DELIMITER ;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值