út 11. 10. 2022 v 5:13 odesílatel gzh <gzhco...@126.com> napsal:

> Hi, Tom
> Thank you for your reply.
>
> > When you're asking for help, please don't give us vague statements
>
> > like "doesn't seem to work".
>
> I understand.
>
>
> > Did the plan (including rowcount
>
> > estimates) change at all?  To what?  How far off is that rowcount
>
> > estimate, anyway --- that is, how many rows actually have cseid = 94?
>
> Please refer to the new execution plan (PostgreSQL 12.11) below.
>
>
> new=# show enable_seqscan;
>
>  enable_seqscan
>
> ----------------
>
>  on
>
> (1 行)
>
>
> new=# select count(*) from analyze_word_reports;
>
>   count
>
> ----------
>
>  21331980
>
> (1 行)
>
>
> new=# select count(*) from analyze_word_reports where (cseid = 94);
>
>   count
>
> ---------
>
>  1287156
>
> (1 行)
>
>
> new=# explain analyze select count(2) from analyze_word_reports where
> (cseid = 94) limit 1;
>
>
>                        QUERY PLAN
>
>
>

the LIMIT clause is in this case totally useless and messy, and maybe can
negative impacts optimizer

Regards

Pavel



>
> ----------------------------------------------------------------------------------------------------------------------------------
>
> --------------------------------------------------------------------------
>
>  Limit  (cost=65184.06..65184.07 rows=1 width=8) (actual
> time=123.713..133.035 rows=1 loops=1)
>
>    ->  Finalize Aggregate  (cost=65184.06..65184.07 rows=1 width=8)
> (actual time=123.712..133.033 rows=1 loops=1)
>
>          ->  Gather  (cost=65183.85..65184.06 rows=2 width=8) (actual
> time=123.548..133.024 rows=3 loops=1)
>
>                Workers Planned: 2
>
>                Workers Launched: 2
>
>                ->  Partial Aggregate  (cost=64183.85..64183.86 rows=1
> width=8) (actual time=119.495..119.496 rows=1 loops=3)
>
>                      ->  Parallel Index Only Scan using
> analyze_word_reports_index_cseid on analyze_word_reports  (cost=0.56..6290
>
> 9.34 rows=509805 width=0) (actual time=0.031..98.706 rows=429052 loops=3)
>
>                            Index Cond: (cseid = 94)
>
>                            Heap Fetches: 1287156  Planning Time: 0.122 ms
> Execution Time: 133.069 ms
>
> (11 行)
>
>
> new=# explain analyze select 2 from analyze_word_reports where (cseid =
> 94) limit 1;
>
>                                                              QUERY PLAN
>
>
>
>
>
> ----------------------------------------------------------------------------------------------------------------------------------
>
> ---
>
>  Limit  (cost=0.00..0.43 rows=1 width=4) (actual time=2156.964..2156.966
> rows=1 loops=1)
>
>    ->  Seq Scan on analyze_word_reports  (cost=0.00..528550.75
> rows=1223533 width=4) (actual time=2156.962..2156.964 rows=1 loops=
>
> 1)
>
>          Filter: (cseid = 94)
>
>          Rows Removed by Filter: 18320180  Planning Time: 0.086 ms
> Execution Time: 2156.985 ms
>
> (6 行)
>
>
>
> > If the estimate is far off, then increasing the table's statistics
>
> > target might help.
>
> Thank you for your advice.
>
> Please tell me how to set the table's statistics up to improve performance.
>
>
> new=#  select oid from pg_class where relname = 'analyze_word_reports';
>
>   oid
>
> -------
>
> 16429
>
> (1 行)
>
>
> new=# select attrelid,attname,attstattarget from pg_attribute where
> attrelid=16429 and attname='cseid';
>
> attrelid | attname | attstattarget
>
> ----------+---------+---------------
>
>     16429 | cseid   |            -1
>
> (1 行)
>
>
> > Another thing that would be worth checking is whether
>
> > "set enable_seqscan = off" prods it to choose the plan you want.
>
> > If not, then there's something else going on besides poor estimates.
>
> "set enable_seqscan = off" works, and the performance is greatly improved,
> which is almost the same as PostgreSQL 8.4.
>
> The enable_seqscan(PostgreSQL 8.4) is on, will this change have an unknown
> effect on other queries?
>
>
>
>
>
> At 2022-10-10 10:45:54, "Tom Lane" <t...@sss.pgh.pa.us> wrote:
> >gzh  <gzhco...@126.com> writes:
> >> I've run analyze(not vacuum analyze), but it doesn't seem to work.
> >
> >When you're asking for help, please don't give us vague statements
> >like "doesn't seem to work".  Did the plan (including rowcount
> >estimates) change at all?  To what?  How far off is that rowcount
> >estimate, anyway --- that is, how many rows actually have cseid = 94?
> >
> >If the estimate is far off, then increasing the table's statistics
> >target might help.
> >
> >Another thing that would be worth checking is whether
> >"set enable_seqscan = off" prods it to choose the plan you want.
> >If not, then there's something else going on besides poor estimates.
> >
> >                     regards, tom lane
>
>

Reply via email to