沒有必要建立多個表。您可以使用Partitioning定義一個表,因此它看起來是一個邏輯整體表,但在內部它被存儲爲具有相同結構的多個物理表。
CREATE TABLE a_database_table (
id INT AUTO_INCREMENT,
date DATE NOT NULL,
value TEXT,
PRIMARY KEY (id, date)
) PARTITION BY RANGE COLUMNS (date) (
PARTITION p1 VALUES LESS THAN ('2014-01-01'),
PARTITION p2 VALUES LESS THAN ('2014-01-10'),
PARTITION p3 VALUES LESS THAN ('2014-01-20'),
PARTITION p4 VALUES LESS THAN ('2014-02-01'),
PARTITION pN VALUES LESS THAN (MAXVALUE)
);
由於數據獲得接近最後一個分區(甚至把它開始填充的最後一個分區後),你可以把它分解:
ALTER TABLE a_database_table REORGANIZE PARTITION pN INTO (
PARTITION p5 VALUES LESS THAN ('2014-02-10'),
PARTITION pN VALUES LESS THAN (MAXVALUE)
);
分區的好處是,對一個查詢具體的一天將「修剪」它對錶的訪問,因此它只讀取一個相關的分區。如果你的查詢是關於一天的具體情況並且MySQL可以推斷出哪個分區包含你正在查找的行,則會自動發生。
是的。它是分片:http://en.wikipedia.org/wiki/Shard_(database_architecture) – aconrad
你是在談論水平分區?說我使用MySQL;在創建表時必須完成分區,還是在分區填充了數百萬個數據後才能將分區添加到表中? –