2011-11-25 75 views
1

我有一個相當大的表,其中一列是日期列。我執行的查詢如下。查詢聚合速度超過MAX

select max(date) from tbl where date < to_date('10/01/2010','MM/DD/YYYY') 

也就是說,我想找到最接近和小於特定日期值的單元格值。這需要相當長的時間,因爲大桌子上最大。有沒有更快的方法來做到這一點?也許使用LAST_VALUE?

回答

3

1)在日期列中添加一個索引。簡而言之,索引允許數據庫引擎存儲關於數據的信息,以便加速大多數查詢,其中該列是其中的一個子句。這裏的信息http://docs.oracle.com/cd/B28359_01/server.111/b28310/indexes003.htm

2)考慮在查詢中添加第二個子句。你有where date < to_date('10/01/2010','MM/DD/YYYY')現在,爲什麼不將其更改爲:

where date < to_date('10/01/2010','MM/DD/YYYY') and date > to_date('09/30/2010', 'MM/DD/YYYY') 

,因爲這會降低掃描的行數。

+0

太棒了!謝謝!。 – Aks

+4

如果可以的話,我會爲這個答案投票+1(第1部分)和-1(第2部分)。 –

+0

@ypercube這是所有關於上下文:) OP還沒有意識到索引,我們都在某處。開始培訓Stackoverflow的人是不現實的,所以在此期間我提供了一個快速的勝利。如果由於增加了第二個條款,Oracle引擎不會提供任何性能改進,那麼我今天就瞭解了有關Oracle的一些信息:) –

1

嘗試

select date from (
    select date from tbl where date < to_date('10/01/2010','MM/DD/YYYY') order by date desc 
) where rownum = 1 
+0

這也需要很長時間。但有趣的想法。謝謝! – Aks

4

把一個指標上的日期欄和查詢應該是足夠快。

+0

我不關注。你能詳細說明一下嗎? – Aks

+0

@Aks:不知道我會怎麼詳細說明......該列是否有索引? – Tomalak

+0

大聲笑...我不知道是什麼把一個索引意味着 – Aks