0

我有一堆按日期排序的数据,每个表只包含一个月的数据。(这样做的原因是为了减少查询时间,我说的是每个月表中的数百万行)

例如。

data_01_2010 holds data from 2010-01-01 to 2010-01-31
data_02_2010 holds data from 2010-02-01 to 2010-02-28

有时我必须根据特定的日期范围查询这些表。现在,如果范围跨越多个月,例如。2010-01-01 到 2010-02-28 然后我需要查询两个表。

这可以通过单个查询来实现吗?例如:

SELECT * 
FROM data_01_2010, data_02_2010 
WHERE date BETWEEN '2010-01-01' AND '2010-02-28'

上述查询的问题在于它表示列日期不明确,因为该列存在于两个表中。(表具有相同的结构)

那么这是否可以通过单个查询来实现,还是我必须分别为每个表查询它?

4

2 回答 2

2

这是为什么分区如此强大的一个完美例子。分区允许您在不牺牲查询性能的情况下逻辑地将所有记录存储在同一个表中。

在此示例中,您将有一个名为的表data(希望您将其命名为比此更好的名称)并根据date列的值对其进行范围分区(再次希望您将此列命名为更好)。这意味着您可以通过简单的选择来满足您的要求:

SELECT * FROM data WHERE date BETWEEN '2010-01-01' AND '2010-02-28';

在幕后,数据库将仅访问基于 where 子句所需的分区。

参考: http ://dev.mysql.com/doc/refman/5.5/en/partitioning.html

于 2010-03-05T16:57:39.670 回答
0

如果您在其他地方执行逻辑以确定您需要查询哪些表,并且每个月都有相同的模式,您可以合并这些表:

SELECT *
FROM data_01_2010
WHERE date BETWEEN '2010-01-01' AND '2010-02-28'
UNION ALL
SELECT *
FROM data_02_2010
WHERE date BETWEEN '2010-01-01' AND '2010-02-28'

但是,如果您需要查询来计算要合并哪些表,那么您就是在冒险进入存储过程领域。

于 2010-03-05T16:46:25.563 回答