2015-08-21 58 views
-2

運行日誌中有太多數據,我無法以快速方式搜索它。現在,我只想獲取最後一個日誌數據在oracle作業的這個日誌表中。請給我幫助。最好!如何使用oracle sql的快速方式查找作業運行日誌中的最後一個日誌列

+0

您可以添加更多的信息。這是非常含糊的,從你的問題 – Naresh

+0

數據集是隨機的,如果使用線性搜索它將花費大約24-26分鐘選擇一個約65179620鏈接數據,是否任何方法來避免線性搜索使用只有索引讓加快?!謝謝! –

回答

0

更好的使用max(日期)這樣

select * from log where date=(select max(date) from log) 

它會使用索引(如果存在的話)

如果你有,你可以不使用日期字段,這樣就可以更好:

select * from log where rowid=(select max(rowid) from log) 
+0

如果有最新日期的條目綁定,這將返回多行。 – MT0

+0

@ MT0可能。它也可以,那個主題首發根本沒有列日期。但是,如果他可以使用PK或rowid這種方法,並且最好) –

+0

爲什麼它會是最好的?它將執行2個表掃描(一個用於查找MAX(),另一個用於返回一個或多個匹配行)。另外 - 按「ROWID」僞列排序並不能保證條目將以入口順序(或條目順序與日誌日期順序匹配)。對於在分佈式系統上由'NOORDER'創建的序列支持的主鍵也是如此。 – MT0

2

有多種方案,以返回的單層行,但這些都將只有一個單一的表掃描做到這一點:

SELECT * 
FROM (SELECT * 
     FROM log_table 
     ORDER BY entry_date DESC 
     ) 
WHERE ROWNUM = 1; 

SELECT * 
FROM (SELECT l.*, 
       ROW_NUMBER() OVER (ORDER BY entry_date DESC) rn 
     FROM log_table l 
     ) 
WHERE rn = 1; 

或(對於Oracle 12)

SELECT * 
FROM log_table 
ORDER BY entry_date DESC 
FETCH FIRST 1 ROW ONLY;