我有一堆按日期排序的数据,每个表只保存一个月的数据。(这样做的原因是为了减少查询时间,我说的是每个月表中的数百万行)
对于ex。
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有时,我必须根据特定的日期范围来查询这些表。现在,如果范围是跨多个月的ex。2010-01-01到2010-02-28,然后我需要查询这两个表。
这可以通过一个查询来实现吗?例如:
SELECT *
FROM data_01_2010, data_02_2010
WHERE date BETWEEN '2010-01-01' AND '2010-02-28'上面查询的问题是,它说date列是不明确的,因为该列在两个表中都存在。(表格具有相同的结构)
那么,这是可以通过单个查询实现的,还是必须为每个表单独查询它?
发布于 2010-03-06 00:57:40
这是为什么分区如此强大的一个完美例子。分区允许您在不牺牲查询性能的情况下逻辑地将所有记录存储在同一个表中。
在此示例中,您将有一个名为 data 的表(希望您将其命名为比此更好的名称)并根据日期列的值对其进行范围分date(同样希望您将此列命名为更好)。这意味着您可以通过简单的选择来满足您的要求:
SELECT * FROM data WHERE date BETWEEN '2010-01-01' AND '2010-02-28';在幕后,数据库将只访问基于where子句所需的分区。
发布于 2010-03-06 00:46:26
如果您在其他地方执行逻辑以确定需要查询哪些表,并且每个月都具有相同的模式,则可以只联合这些表:
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'但是,如果您需要查询来计算哪些表要联合,那么您就进入了存储过程的领域。
https://stackoverflow.com/questions/2388315
复制相似问题