MySQL週次パーティション生成週次パーティション支援ストレージプロセス
7357 ワード
週単位パーティションのテーブル作成文は次のとおりです.
--最初のパーティションには通常データがありません.あるパーティションのデータを問い合わせると、自動的に最初のパーティションが調べられます.クエリーの速度を速めるために、最初のパーティションを設定する時間はかなり前のPARTITION P 2010,0101 VALOUES LESS THAN(UNIX_TIMESTAMP('2010-01-01 00:00'))ENGINE=InnoDBです. PARTITION P20120923VALUES LESS THAN (UNIX_TIMESTAMP('2012-09-23 00:00:00')) ENGINE = InnoDB, PARTITION P20120930VALUES LESS THAN (UNIX_TIMESTAMP('2012-09-30 00:00:00')) ENGINE = InnoDB, PARTITION PMaxValueVALUES LESS THAN MAXVALUE ENGINE = InnoDB
);
今後数年のパーティションを事前に作成する場合(もちろんeventでストレージ・プロシージャを自動的にスケジュールしてパーティションを自動的に作成することもできます)、パーティションの文をどのように生成するか、
次のように生成されます.
PARTITION P20120923VALUES LESS THAN (UNIX_TIMESTAMP('2012-09-23 00:00:00')) ENGINE = InnoDB, PARTITION P20120930VALUES LESS THAN (UNIX_TIMESTAMP('2012-09-30 00:00:00')) ENGINE = InnoDB
... 生成方法は、生成されたパーティション文がテーブルtemp_に保存されます.generate_partition_unix_timeのフィールドpartition_sentenceで
CREATE TABLE `article` (
`Article_ID` int(11) NOT NULL AUTO_INCREMENT,
...
...
`Extracted_Time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
KEY `PRIMARYKeyID` (`Article_ID`),
KEY `AK_Time` (`Extracted_Time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=' '
PARTITION BY RANGE (UNIX_TIMESTAMP(Extracted_Time))
(
--最初のパーティションには通常データがありません.あるパーティションのデータを問い合わせると、自動的に最初のパーティションが調べられます.クエリーの速度を速めるために、最初のパーティションを設定する時間はかなり前のPARTITION P 2010,0101 VALOUES LESS THAN(UNIX_TIMESTAMP('2010-01-01 00:00'))ENGINE=InnoDBです. PARTITION P20120923VALUES LESS THAN (UNIX_TIMESTAMP('2012-09-23 00:00:00')) ENGINE = InnoDB, PARTITION P20120930VALUES LESS THAN (UNIX_TIMESTAMP('2012-09-30 00:00:00')) ENGINE = InnoDB, PARTITION PMaxValueVALUES LESS THAN MAXVALUE ENGINE = InnoDB
);
今後数年のパーティションを事前に作成する場合(もちろんeventでストレージ・プロシージャを自動的にスケジュールしてパーティションを自動的に作成することもできます)、パーティションの文をどのように生成するか、
次のように生成されます.
PARTITION P20120923VALUES LESS THAN (UNIX_TIMESTAMP('2012-09-23 00:00:00')) ENGINE = InnoDB, PARTITION P20120930VALUES LESS THAN (UNIX_TIMESTAMP('2012-09-30 00:00:00')) ENGINE = InnoDB
... 生成方法は、生成されたパーティション文がテーブルtemp_に保存されます.generate_partition_unix_timeのフィールドpartition_sentenceで
drop table temp_generate_partition_unix_time;
create table temp_generate_partition_unix_time(
id int auto_increment PRIMARY key,
year_week varchar(10),
date date,
unix_time BIGINT,
partition_sentence varchar(255)
);
CREATE PROCEDURE `sp_generate_partition_unixtime`(week_total_count_in int, begin_date_in varchar(10))
BEGIN
/***********************************************
***********************************************/
truncate table temp_generate_partition_unix_time;
set @i=1;
loop1: WHILE @i<=week_total_count_in DO
set @date=DATE_ADD(begin_date_in,INTERVAL (@i-1)*7 DAY);
INSERT into temp_generate_partition_unix_time(year_week,date,unix_time,partition_sentence)
SELECT YEARWEEK(@date),@date,UNIX_TIMESTAMP(@date),CONCAT('PARTITION P',REPLACE(@date,'-',''),' VALUES LESS THAN (UNIX_TIMESTAMP(''',@date,' 00:00:00'')) ENGINE = InnoDB,');
set @i=@i+1;
END WHILE loop1;
END;
call sp_generate_partition_unixtime(180,'2012-09-23');
SELECT * from temp_generate_partition_unix_time;