Search Postgresql Archives

Re: Execution plan does not use index

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Curious, how accurate is that row count of 1.2 million records for 3 days?

Not to bad actually

select count(mv_inner.*)
from measurement_value AS mv_inner
where mv_inner.timestamp > '2020-11-06'::timestamp - interval '1 day' and mv_inner.timestamp < '2020-11-07'::timestamp + interval '1 day'
offset 0

==> 1128736


How many total records in the table?

±168 million

If you disable sequential scan, does it choose the index and what cost does it show?

It chooses the index, but apparently to create some intermediate structure that then later still needs to be joined on the device_id. Probably requires scanning all pages of the index, which might explain why the performance is still not ok

set enable_seqscan to false;
explain
select d.short_id,mv.timestamp,mv.I64_01
  from 
    device d
    , device_configuration dc
    , (
      select mv_inner.*
        from measurement_value AS mv_inner
        where mv_inner.timestamp > '2020-11-06'::timestamp - interval '1 day' and mv_inner.timestamp < '2020-11-07'::timestamp + interval '1 day'
        offset 0
      ) mv
    , pg_timezone_names tzn
  where mv.device_id=d.short_id and dc.device_id = d.id and dc.latest=true and dc.timezone=tzn.name and
        mv.timestamp > '2020-11-06'::timestamp - tzn.utc_offset and mv.timestamp < '2020-11-07'::timestamp - tzn.utc_offset

==>


Hash Join  (cost=6677594.18..9545649.57 rows=434126 width=20)
  Hash Cond: (mv_inner.device_id = d.short_id)
  Join Filter: ((mv_inner."timestamp" > ('2020-11-06 00:00:00'::timestamp without time zone - pg_timezone_names.utc_offset)) AND (mv_inner."timestamp" < ('2020-11-07 00:00:00'::timestamp without time zone - pg_timezone_names.utc_offset)))
  ->  Bitmap Heap Scan on measurement_value mv_inner  (cost=6676540.29..9446603.90 rows=1220458 width=1006)
        Recheck Cond: (("timestamp" > '2020-11-05 00:00:00'::timestamp without time zone) AND ("timestamp" < '2020-11-08 00:00:00'::timestamp without time zone))
        ->  Bitmap Index Scan on measurement_values_pkey  (cost=0.00..6676235.18 rows=1220458 width=0)
              Index Cond: (("timestamp" > '2020-11-05 00:00:00'::timestamp without time zone) AND ("timestamp" < '2020-11-08 00:00:00'::timestamp without time zone))
  ->  Hash  (cost=1026.55..1026.55 rows=2187 width=20)
        ->  Hash Join  (cost=471.95..1026.55 rows=2187 width=20)
              Hash Cond: (dc.timezone = pg_timezone_names.name)
              ->  Hash Join  (cost=449.45..903.76 rows=615 width=18)
                    Hash Cond: (dc.device_id = d.id)
                    ->  Bitmap Heap Scan on device_configuration dc  (cost=242.72..688.58 rows=615 width=30)
                          Filter: latest
                          ->  Bitmap Index Scan on device_configuration_device_latest_idx  (cost=0.00..242.57 rows=615 width=0)
                                Index Cond: (latest = true)
                    ->  Hash  (cost=198.19..198.19 rows=683 width=20)
                          ->  Index Scan using device_short_id_key on device d  (cost=0.28..198.19 rows=683 width=20)
              ->  Hash  (cost=10.00..10.00 rows=1000 width=48)
                    ->  Function Scan on pg_timezone_names  (cost=0.00..10.00 rows=1000 width=48)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux