pgsql: Use functional dependencies to estimate ScalarArrayOpExpr - Mailing list pgsql-committers

From Tomas Vondra
Subject pgsql: Use functional dependencies to estimate ScalarArrayOpExpr
Date
Msg-id E1jD8Vr-0007rv-QB@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Use functional dependencies to estimate ScalarArrayOpExpr

Until now functional dependencies supported only simple equality clauses
and clauses that can be trivially translated to equalities. This commit
allows estimation of some ScalarArrayOpExpr (IN/ANY) clauses.

For IN clauses we can do this thanks to using operator with equality
semantics, which means an IN clause

    WHERE c IN (1, 2, ..., N)

can be translated to

    WHERE (c = 1 OR c = 2 OR ... OR c = N)

IN clauses are now considered compatible with functional dependencies,
and rely on the same assumption of consistency of queries with data
(which is an assumption we already used for simple equality clauses).
This applies also to ALL clauses with an equality operator, which can be
considered equivalent to IN clause.

ALL clauses are still considered incompatible, although there's some
discussion about maybe relaxing this in the future.

Author: Pierre Ducroquet
Reviewed-by: Tomas Vondra, Dean Rasheed
Discussion: https://www.postgresql.org/message-id/flat/13902317.Eha0YfKkKy%40pierred-pdoc

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/8f321bd16cdb11307f17007eb3c55b65d7d323ef

Modified Files
--------------
doc/src/sgml/perform.sgml               |   3 +-
src/backend/statistics/dependencies.c   |  38 ++++++
src/test/regress/expected/stats_ext.out | 224 ++++++++++++++++++++++++++++++++
src/test/regress/sql/stats_ext.sql      |  80 ++++++++++++
4 files changed, 344 insertions(+), 1 deletion(-)


pgsql-committers by date:

Previous
From: Tom Lane
Date:
Subject: pgsql: Doc: fix mistaken reference to "PG_ARGNULL_xxx()" macro.
Next
From: Tom Lane
Date:
Subject: pgsql: Restructure polymorphic-type resolution in funcapi.c.