2012-09-17 16 views
0

我有表示表示具有開始和結束時間的事件的表(存儲爲DATE,TIMESTAMP或TIMESTAMP WITH TIME ZONE格式),例如,Oracle:日期間隔內的高效查詢

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 < = t2。

由於這些查詢要在大型表上運行,是否有更好的,也就是更高效的方式來執行上述查詢?

目前我不知道任何具有上述結構的表在任何時間數據列上都有索引,但添加它們仍然不是問題。他們在其他非時間相關的專欄上有索引。

我記得已經閱讀過一些使用分析函數(比如分區)的方法,這些查詢可以比簡單地使用BETWEEN..AND更有效。不幸的是,我找不到鏈接了,我不知道分析功能,我已經在網上閱讀了幾個簡短的介紹。

因爲我沒有多少時間進行調查,所以我想問你是否可以證實我的理論,並且如果你能指引我一個與我的問題有關的例子。

毫無疑問,我不是在問你我的問題的快速回答,有的是複製&粘貼,只是一個提示,瞭解我是否正在尋找正確的方向。

TIA

編輯: @jonearles:對於第一個說法我同意,但我想知道,如果使用的分析功能不實際上能夠提供更高效的查詢。

對於後者,是的,我的意思是PARTITION BY子句。對我來說這是一個愚蠢的規範,因爲分析函數預計會與PARTITION BY子句一起使用。 我對這個問題表示歉意,正如我之前所說的那樣,我對這個問題沒有多大的瞭解。

+0

你的索引是什麼? – Ben

+0

答案已添加到問題中。 – user881430

回答

0

您的查詢可能沒有問題。編寫謂詞的最簡單方法通常是最好的。這就是Oracle所期望的,而且很可能是甲骨文的優化目標。

您可能想要查看創建對象以改進訪問方法。特別是indexes(如果您選擇少量數據)和partitions(如果您選擇大量數據)。

「分區」可以表示Oracle中至少有三種不同的東西。也許你已經在分區功能中將分析功能中的「分區依據」從句混淆了?