When considering functional dependencies during selectivity estimation, it's not necessary to bother with selecting the best extended statistic object and then use just dependencies from it. We can simply consider all applicable functional dependencies at once.
This means we need to deserialie all (applicable) dependencies before applying them to the clauses. This is a bit more expensive than picking the best statistics and deserializing dependencies for it. To minimize the additional cost, we ignore statistics that are not applicable.
Author: Tomas Vondra
aaa6761876 Apply all available functional dependencies
src/backend/statistics/dependencies.c | 116 +++++++++++++++++++++-----------
src/test/regress/expected/stats_ext.out | 57 ++++++++++++++++
src/test/regress/sql/stats_ext.sql | 35 ++++++++++
3 files changed, 169 insertions(+), 39 deletions(-)