我有一個SQL查詢,這是非常緩慢:PostgreSQL的查詢速度很慢與::日期,時間::和間隔
select number1 from mytable
where symbol = 25
and timeframe = 1
and date::date = '2008-02-05'
and date::time='10:40:00' + INTERVAL '30 minutes'
的目標是返回一個值,和PostgreSQL需要時1.7秒返回所需的值(總是一個值)。我需要爲一個任務執行數百個查詢,所以這變得非常緩慢。 執行相同的查詢,但不直接使用間隔和::日期指着時間,時間::只有17MS需要:
select number1 from mytable
where symbol = 25
and timeframe = 1
and date = '2008-02-05 11:10:00'
我認爲這將是,如果我不會用::日期和更快: :時間,但是當我執行如下查詢時:
select number1 from mytable
where symbol = 25
and timeframe = 1
and date = '2008-02-05 10:40:00' + interval '30 minutes'
我得到一個sql錯誤(22007)。我已經嘗試過不同的變化,但是如果不使用:: date和:: time,我就無法獲得間隔時間。日期/時間函數postgresql.org沒有幫助我。
表中的符號,時間範圍,日期有多列索引。
有沒有執行與增加時間,或間隔工作語法,我沒有使用::日期和時間::查詢的快捷方式?或者當我使用像這樣的查詢時需要有一個特殊的索引?
Postgresql版本是9.2。
編輯: 表格的格式是: date =帶時區的時間戳, symbol,timeframe = numeric。
編輯2: 使用
select open from ohlc_dukascopy_bid
where symbol = 25
and timeframe = 1
and date = timestamp '2008-02-05 10:40:00' + interval '30' minute
說明顯示:
"Index Scan using mcbidindex on mytable (cost=0.00..116.03 rows=1 width=7)" " Index Cond: ((symbol = 25) AND (timeframe = 1) AND (date = '2008-02-05 11:10:00'::timestamp without time zone))"
現在時間相當快:第一次運行86ms。
並請發佈完整的錯誤消息,不僅錯誤號。 –
我只在符號,時間範圍,日期上有多列索引。會爲日期專門設置一個額外的索引嗎?我認爲多列索引就足夠了。編輯:我看到我應該運行一個解釋,看看我的索引是否正在使用。 – harbun
取決於如何定義索引。索引中的第一列是哪一列?請張貼全表定義,包括索引和執行計劃 –