我有表示事件的开始和结束时间的表(存储为 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 值 st t1<= t2。
由于这些查询将在大型表上运行,是否有更好的,即更有效的方式来执行上述查询?
目前我不知道是否有任何具有上述结构的表在任一时间数据列上都有索引,但添加它们仍然不是问题。它们在其他非时间相关的列上有索引。
我记得读过一些文章,使用分析函数(如分区)可以使这类查询比简单地使用 BETWEEN..AND 更有效。不幸的是,我再也找不到链接,也不知道分析功能,我在网上到处阅读了一些简短的介绍。
由于我没有多少时间进行调查,我想问您是否可以证实我的理论,以及您是否可以引导我找到与我的问题相关的示例。
不用说,我不是要您快速回答我的问题,要复制和粘贴的内容,只是提示您了解我是否在寻找正确的方向。
TIA
编辑: @jonearles:对于第一个陈述,我同意,但我想知道分析功能的使用是否实际上不能提供更有效的查询。
对于后者,是的,我的意思是 PARTITION BY 子句。在我看来,这是一个愚蠢的规范,因为预计分析函数将与 PARTITION BY 子句一起使用。我为混乱道歉,正如我之前所说,我没有深入研究这个主题。