我有一堆按日期排序的数据,每个表只保存一个月的数据。 (这样做的原因是为了减少查询时间,我在谈论每个月表中数百万行)
对于前。
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'
上述查询的问题在于它表示列日期不明确,因为该列存在于两个表中。 (表格具有相同的结构)
这可以通过单个查询实现,还是我必须分别查询每个表?
答案 0 :(得分: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
答案 1 :(得分: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'
但是,如果您需要查询来计算要合并的表,那么您将深入了解存储过程的领域。