> On Jun 5, 2018, at 1:32 PM, Pavel Stehule <pavel.steh...@gmail.com> wrote:
> 
> 
> 
> 2018-06-05 20:24 GMT+02:00 armand pirvu <armand.pi...@gmail.com 
> <mailto:armand.pi...@gmail.com>>:
> All
> 
> Please see below
> 
> explain analyze select * from sp_i2birst_reg_staging_test where evt_id = 
> 'ACSF17'   
> and status=0 limit 10;
>                                                             QUERY PLAN        
>                                                      
> -----------------------------------------------------------------------------------------------------------------------------------
>  Limit  (cost=0.00..1.29 rows=10 width=519) (actual time=0.110..0.439 rows=10 
> loops=1)
>    ->  Seq Scan on sp_i2birst_reg_staging_test  (cost=0.00..548.40 rows=4239 
> width=519) (actual time=0.109..0.429 rows=10 loops=1)
>          Filter: (((evt_id)::text = 'ACSF17'::text) AND (status = 0))
>          Rows Removed by Filter: 115
>  Planning time: 3.022 ms
>  Execution time: 0.639 ms
> (6 rows)
> 
> 
> 
> birstdb=# \d sp_i2birst_reg_staging_test
>                                      Table 
> "csischema.sp_i2birst_reg_staging_test"
>     Column     |            Type             |                                
> Modifiers                                
> ---------------+-----------------------------+-------------------------------------------------------------------------
>  action_id     | bigint                      | not null default 
> nextval('i2birst_reg_staging_action_id_seq'::regclass)
>  reg_uid       | integer                     | not null
>  evt_uid       | integer                     | not null
>  evt_id        | character varying(10)       | not null
>  operation     | character varying(6)        | not null
>  status        | smallint                    | not null
>  category      | character varying(20)       | not null default ''::character 
> varying
>  add_date      | timestamp with time zone    | not null default now()
>  mod_date      | timestamp with time zone    | not null default now()
>  ingres_data   | jsonb                       | 
>  thread_number | bigint                      | not null default 0
>  start_time    | timestamp without time zone | 
>  end_time      | timestamp without time zone | 
> Indexes:
>     "sp_i2birst_reg_staging_test_pkey" PRIMARY KEY, btree (action_id)
>     "sp_i2birst_reg_staging_test_idx" btree (status, evt_id, category)
> Check constraints:
>     "sp_i2birst_reg_staging_test_status_check" CHECK (status = ANY (ARRAY[0, 
> 1, 2, 3]))
> 
> Even if add an index on evt_id and status same table scan
> 
> But 
> 
> select count(*) from sp_i2birst_reg_staging_test;
>  count 
> -------
>   6860
> 
> select count(*) from sp_i2birst_reg_staging_test where evt_id = 'ACSF17'   
> and status=0 ;
>  count 
> -------
>   4239
> 
> So I can see why the planner is choosing a table scan 
> 
> My question is: I suspect the limit simply limits the fethching to the first 
> n-records retrieved and has no implications whatsoever on the planner, 
> meaning the planner ignores it. Am I right or wrong ?
> 
> LIMIT is last clause and it is processed after aggregation. 
> 
> probably you would select count(*) from (select * from 
> sp_i2birst_reg_staging_test where evt_id = 'ACSF17'  LIMIT 10) s;
> 
> more you have not index on evt_id column - there is composite index, but the 
> chance can be low
> 
> Regards
> 
> Pavel
> 
> 
> Thanks
> — Armand
> 
> 
> 
> 
> 
> 


Thank you Pavel

I put the counts to show that the number of records retrieved without limit 
relative to a plain select count(*) is far more than 5% and an index is just 
from this very reason deemed useless, aka the restriction is really non existent

— Armand

Reply via email to