database-design - 关于数据库表设计的建议基于senario的数据库表设计

  显示原文与译文双语对照的内容

可能是一种奇怪的情况但是我觉得。
假设我有一个数据库表,每天有 1万行的行。 表中有 3列: id,值,日期。

我想做的是根据日期加载所有行。

下面是一个问题:

Given this table使用( 我只需要在特定的一天中获取行的列表)的方式,performance性能 wise wise creating creating creating structure structure structure structure structure structure structure structure structure Jan2014 Jan2014. 每个有 1万记录的记录都有利于将一个表和日期列中的所有行作为索引?

谢谢,Tony

时间: 作者:

不需要创建多个表。 可以使用分区with定义一个表,因这里它似乎是一个逻辑整表,但内部存储为多个物理表。


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可以推断哪个分区包含你要查找的行,那么就自动发生。

作者:
...