Re: Question about double table scans for a table

Поиск
Список
Период
Сортировка
От David Rowley
Тема Re: Question about double table scans for a table
Дата
Msg-id CAApHDvpBJprgHT0R6LkENsH78gAhegbf0Zv5XokXpF8LBYNE9A@mail.gmail.com
обсуждение исходный текст
Ответ на Question about double table scans for a table  (Ba Jinsheng <bajinsheng@u.nus.edu>)
Список pgsql-bugs
On Thu, 27 Jul 2023 at 20:49, Ba Jinsheng <bajinsheng@u.nus.edu> wrote:
> Both query plans include different numbers of table scans, as highlighted in red color. PostgreSQL uses six table
scans,while TiDB has only three. I understand that the table scanning operation is expensive and query plans are
typicallymore efficient with fewer table scans. My question is why PostgreSQL uses six table scans to scan each table
twice?Is it a more efficient query plan, or does this indicate an optimization that is not performed by PostgreSQL? 

The PostgreSQL planner does not do any scan deduplication like this.
You could likely write a query containing a WITH MATERALIZE that runs
the query with the GROUP BY, then reference the CTE in both the main
query and also the HAVING clause. e.g, something like:

explain with cte as materialized (select ps_partkey, sum(ps_supplycost
* ps_availqty) as cost from partsupp ... other joins...) select * from
cte having cost > (select sum(cost) from cte);

How much more efficient that'll be will depend on the number of distinct parts.

David



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

Предыдущее
От: Jeff Davis
Дата:
Сообщение: search_path not recomputed when role name changes
Следующее
От: PG Bug reporting form
Дата:
Сообщение: BUG #18040: PostgreSQL does not report its version correctly