2013-09-24 58 views
0

我正在查詢一個postgres數據庫表,我只能讀取並且無法以任何方式進行修改。長話短說我需要每天運行一個查詢來在幾天內提取記錄。我一直在每天都在進行修改時間戳參數。該表大約有4000萬條記錄,我正在運行從sql server到鏈接服務器的查詢。如何在POSTGRES查詢中將日期轉換爲時間戳時避免進行全表掃描?

c_stime字段上有一個索引,它是我試圖利用的時間戳,但是當我在字段上執行某個函數時,我殺死了這個優點。以下是我的一些結果:

select * from p_table where c_stime >= '2013-09-24 00:00:00.0000000' 
select * from p_table where c_stime >= current_date::timestamp 
select * from p_table where c_stime >= current_date+ interval '0 hour' 

第一次運行10秒,第二次運行74秒,第三次運行88秒。想要像第二/第三的動態表現,接近第一。任何幫助讚賞

+1

有多少40萬行的是檢索? –

+0

50-70k是您試圖查詢查詢計劃的平均值 – kdonah3

+1

? –

回答

0

首先,檢查您的查詢計劃。那裏可能會有驚喜。其次,如果問題如你所說,我感到驚訝的是,這是行不通的。但是你可以使用pg_catalog *函數來進行類型轉換,這些都是不可變(允許計劃查詢前要運行的功能),所以你可以嘗試:

select * from p_table where c_stime >= pg_catalog.timestamp(current_date);