2012-01-13 12 views
3

テーブルをYEARとWEEKに分割するには、mysqlパーティションテーブルを使用します。私はmysqlマージテーブルでこれを行う方法を正確に知っていますが、パーティションテーブルは異なります。誰かが次のテーブルスキーマで助けてもらえますか?年と週でMySQLを分割する

CREATE TABLE `tableName` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `dateandtime` datetime NOT NULL, 
    `othervalue` int(10) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM; 

また、特定のエンジンに搭載されていなければなりませんか?

私はdateandtimeをint(10)タイムスタンプとして保存するとどうしますか?あなたは、あなたが機能TO_DAYS(dateandtime)で仕切る通常...回避しなければならないので、

CREATE TABLE `tableName` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `dateandtime` int(10) NOT NULL, 
    `othervalue` int(10) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM; 

答えて

2

のMySQL 5.1は、日付によるパーティション操作を行うことができない、このような例: - 最初

 
CREATE TABLE tbl (
...) ENGINE=InnoDB 
PARTITION BY RANGE (to_days(dateandtime)) (
PARTITION pNULL VALUES LESS THAN (0) ENGINE = InnoDB, 
PARTITION p20111218 VALUES LESS THAN (TO_DAYS('2011-12-18')) ENGINE = InnoDB, 
PARTITION p20111225 VALUES LESS THAN (TO_DAYS('2011-12-25')) ENGINE = InnoDB, 
PARTITION pNew VALUES LESS THAN MAXVALUE ENGINE = InnoDB 
) 

私はここで4つのパーティションを定義しました将来の日付の挿入が失敗しないように、完全性のためです。 (パーティションが存在しない値はINSERTできません)最初のパーティションはパフォーマンス用です。NULL値は意図的にそこに格納されます。中央の2つのパーティションが実際に使用されており、それぞれ1週間のデータを保持しています。

ALTER TABLE tbl DROP PARTITION xyzを使用して古いパーティションを削除することができます(古い行を削除するのと比べて非常に高速です)。最後のパーティションを分割して新しいパーティションを追加することができます。

 
ALTER TABLE tbl REORGANIZE PARTITION pNew INTO (
    PARTITION p20120115 VALUES LESS THAN (TO_DAYS('2012-01-16')), 
    ... 
    PARTITION pNew VALUES LESS THAN (MAXVALUE) 
); 
+0

dateandtimeはPRIMARYまたはUNIQUEキーの一部にする必要がありますか? – Bretticus

+0

いいえ...私は1日に12以上の数百の行を持つテーブルをロギングするために使用します。同じ秒内に多数の行があるので、私の場合はUNIQUEは使用できません。 – Marki555