Malo se cudno ponasao kad sam rekao 200 particija, trpao je podatke nekim cudnim redom u bazu, pa nisam imao osjecaj kontrole.
To je jedan razlog sto sam odustao od takvog nacina particionisanja.
Drugi razlog je 200 fajlova na disku.
Zbog toga sam malo otezao sebi posao ali je bar stanje urednije:
Napravio sam tabelu i dodao joj samo jednu particiju, za vrijednosti ispod npr. 2008. godine, ali je particija RANGE(`godina`).
Nakon toga sam napravio event koji se izvrsava jednom dnevno i koji provjerava da li ce se godina pomjeriti u toku sledecih 7 dana.
Na osnovu toga dodaje se nova particija za tu godinu.
Code:
CREATE EVENT `kreiraj_TABLE_NAME_particiju`
ON SCHEDULE EVERY 1 DAY STARTS '2007-01-01 00:00:00'
ON COMPLETION NOT PRESERVE
ENABLE COMMENT 'kreira particiju za TABLE_NAME arhivu za sledecu godinu'
DO
begin
select YEAR(NOW()) into @godina;
select YEAR(NOW()+interval 7 day) into @godina_plus_7;
if @godina_plus_7 > @godina then
SET @s := concat ('select count(*) into @particija_postoji from INFORMATION_SCHEMA.PARTITIONS where table_name="TABLE_NAME" and table_schema="DB_NAME" and partition_name="p_',YEAR(NOW())+1,'"');
PREPARE stmt FROM @s;
execute stmt;
if @particija_postoji = 0 then
SET @s := CONCAT('alter table TABLE_NAME add partition (partition p_',YEAR(NOW())+1,' values less than (',YEAR(NOW())+2,'))');
PREPARE stmt FROM @s;
execute stmt;
end if;
end if;
end