Re: Explain returns different number of rows

Поиск
Список
Период
Сортировка
От Peter J. Holzer
Тема Re: Explain returns different number of rows
Дата
Msg-id 20221022093232.mrzvpsosul7sslyw@hjp.at
обсуждение исходный текст
Ответ на Re: Explain returns different number of rows  (Christophe Pettus <xof@thebuild.com>)
Ответы Re: Explain returns different number of rows  (Vince McMahon <sippingonesandzeros@gmail.com>)
Список pgsql-general
On 2022-10-20 09:56:23 -0700, Christophe Pettus wrote:
> On Oct 20, 2022, at 09:52, Vince McMahon <sippingonesandzeros@gmail.com> wrote:
> > The number of rows are different.
>
> This isn't unexpected.  EXPLAIN does not actually run the query and
> determine how many rows are returned; it calculates an estimate based
> on the current system statistics, which vary constantly depending on
> activity in the database.

EXPLAIN ANALYZE (which is what he did) does run the query and return the
actual number of rows:

#v+
wdsah=> explain (analyze, buffers) select * from facttable_eurostat_comext_cpa2_1 ;

╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
║                                                                    QUERY PLAN
                          ║ 

╟──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╢
║ Seq Scan on facttable_eurostat_comext_cpa2_1  (cost=0.00..1005741.32 rows=39633432 width=85) (actual
time=0.396..6541.701rows=39633591 loops=1) ║ 
║   Buffers: shared read=609407
                          ║ 
║ Planning Time: 1.650 ms
                          ║ 
║ Execution Time: 7913.027 ms
                          ║ 

╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
(4 rows)
#v-

The first tuple (cost=0.00..1005741.32 rows=39633432 width=85) is an
estimate used to plan the query. But the second one
(actual time=0.396..6541.701 rows=39633591 loops=1)
contains measurements from actually running the query.

I think it's possible that the rows estimate in the first tuple changes
without any actual data change (although the only reason I can think of
right now would be an ANALYZE (in another session or by autovacuum)).
But the actual rows definitely shouldn't change.

        hp

--
   _  | Peter J. Holzer    | Story must make more sense than reality.
|_|_) |                    |
| |   | hjp@hjp.at         |    -- Charles Stross, "Creative writing
__/   | http://www.hjp.at/ |       challenge!"

Вложения

В списке pgsql-general по дате отправления:

Предыдущее
От: Julie Nishimura
Дата:
Сообщение: Re: constantly updated table in Amazon RDS
Следующее
От: Joseph Kennedy
Дата:
Сообщение: synchronous streaming replication