【发布时间】:2012-09-17 16:33:49
【问题描述】:
我有表格表示事件的开始和结束时间(存储为 DATE、TIMESTAMP 或 TIMESTAMP WITH TIME ZONE 格式),例如
MY_TABLE:
DATA START END
A 1/11/2012 10:00 1/11/2012 12:00
B 2/12/2012 08:00 2/12/2012 16:00
并且经常碰巧在一段时间内对此类表进行查询,例如
SELECT data
FROM my_table
WHERE start BETWEEN t1 AND t2; -- usually we either use start or end time for every row.
其中 t1 和 t2 是 DATE/TIMESTAMP 值 s.t。 t1
由于这些查询将在大型表上运行,是否有更好,即更有效的方式来执行上述查询?
目前我不知道是否有任何具有上述结构的表在任一时间数据列上都有索引,但添加它们仍然不是问题。它们在其他非时间相关的列上有索引。
我记得读过一些文章,使用分析函数(如分区)可以使这类查询比简单地使用 BETWEEN..AND 更有效。不幸的是,我再也找不到链接了,我也不知道分析功能,我只是在网上到处阅读了一些简短的介绍。
由于我没有多少时间进行调查,我想问您是否可以证实我的理论,以及您是否可以引导我举一个与我的问题相关的示例。
不用说,我并不是要您快速回答我的问题,复制粘贴的内容,只是提示您了解我的方向是否正确。
TIA
编辑: @jonearles:我同意第一个说法,但我想知道分析功能的使用是否实际上无法提供更有效的查询。
对于后者,是的,我的意思是 PARTITION BY 子句。在我看来,这是一个愚蠢的规范,因为预计分析函数将与 PARTITION BY 子句一起使用。 我为造成的混乱道歉,正如我之前所说的,我没有深入研究这个主题。
【问题讨论】:
-
答案已添加到问题中。