PostgreSQL与datetime比较的性能差异

时间:2016-04-13 13:42:54

标签: postgresql

我正在尝试优化PostgreSQL查询的性能。当我将查询中的日期时间更改为一秒时,我注意到执行查询所需的时间发生了很大变化。我试图弄清楚为什么在查询中发生这么小的变化时,性能会发生如此剧烈的变化。我运行了一个解释(分析,缓冲)并看到它们的运行方式有所不同,但我不太了解它应该怎么做。有什么帮助吗?

这是第一个查询

<textField>
<reportElement x="111" y="26" width="100" height="20" uuid="5a471a16-de7b-4f55-9c9f-b01d37938b9f"/>
 <textElement>
    <font fontName="Arial Unicode MS" pdfEncoding="Identity-H" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression><![CDATA[$F{my_column_values}]]></textFieldExpression>

如果我将后一个date_time增加一秒钟到SELECT avg(travel_time_all) FROM tt_data WHERE date_time >= '2014-01-01 08:00:00' and date_time < '2014-01-01 8:14:13' and (tmc = '118P04252' or tmc = '118P04253' or tmc = '118P04254' or tmc = '118P04255' or tmc = '118P04256') group by tmc order by tmc 并重新运行查询,则会大大增加执行时间。

以下是两个查询的解释(分析,缓冲区)的结果。第一个查询:

2014-01-01 8:14:14

以下是第二个查询:

    GroupAggregate  (cost=6251.99..6252.01 rows=1 width=14) (actual time=0.829..0.829 rows=1 loops=1)
  Buffers: shared hit=506
  ->  Sort  (cost=6251.99..6252.00 rows=1 width=14) (actual time=0.823..0.823 rows=1 loops=1)
    Sort Key: tmc
    Sort Method: quicksort  Memory: 25kB
    Buffers: shared hit=506
    ->  Bitmap Heap Scan on tt_data  (cost=36.29..6251.98 rows=1 width=14) (actual time=0.309..0.817 rows=1 loops=1)
          Recheck Cond: ((date_time >= '2014-01-01 08:00:00'::timestamp without time zone) AND (date_time < '2014-01-01 08:14:13'::timestamp without time zone))
          Filter: ((tmc = '118P04252'::text) OR (tmc = '118P04253'::text) OR (tmc = '118P04254'::text) OR (tmc = '118P04255'::text) OR (tmc = '118P04256'::text))
          Rows Removed by Filter: 989
          Buffers: shared hit=506
          ->  Bitmap Index Scan on tt_data_2_date_time_idx  (cost=0.00..36.29 rows=1572 width=0) (actual time=0.119..0.119 rows=990 loops=1)
            Index Cond: ((date_time >= '2014-01-01 08:00:00'::timestamp without time zone) AND (date_time < '2014-01-01 08:14:13'::timestamp without time zone))
            Buffers: shared hit=7
Total runtime: 0.871 ms

关于如何使第二个查询与第一个查询一样快的任何建议?我想将此时间间隔增加更多,但不希望性能下降。

0 个答案:

没有答案