我有一个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
取决于如何定义索引。索引中的第一列是哪一列?请张贴全表定义,包括索引和执行计划 –