我有一個相當大的表,其中一列是日期列。我執行的查詢如下。查詢聚合速度超過MAX
select max(date) from tbl where date < to_date('10/01/2010','MM/DD/YYYY')
也就是說,我想找到最接近和小於特定日期值的單元格值。這需要相當長的時間,因爲大桌子上最大。有沒有更快的方法來做到這一點?也許使用LAST_VALUE?
我有一個相當大的表,其中一列是日期列。我執行的查詢如下。查詢聚合速度超過MAX
select max(date) from tbl where date < to_date('10/01/2010','MM/DD/YYYY')
也就是說,我想找到最接近和小於特定日期值的單元格值。這需要相當長的時間,因爲大桌子上最大。有沒有更快的方法來做到這一點?也許使用LAST_VALUE?
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')
,因爲這會降低掃描的行數。
嘗試
select date from (
select date from tbl where date < to_date('10/01/2010','MM/DD/YYYY') order by date desc
) where rownum = 1
這也需要很長時間。但有趣的想法。謝謝! – Aks
太棒了!謝謝!。 – Aks
如果可以的話,我會爲這個答案投票+1(第1部分)和-1(第2部分)。 –
@ypercube這是所有關於上下文:) OP還沒有意識到索引,我們都在某處。開始培訓Stackoverflow的人是不現實的,所以在此期間我提供了一個快速的勝利。如果由於增加了第二個條款,Oracle引擎不會提供任何性能改進,那麼我今天就瞭解了有關Oracle的一些信息:) –