Re: Planner statistics usage for composite type

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Dmitry Lazurkin <dilaz03(at)gmail(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: Planner statistics usage for composite type
Date: 2017-07-19 15:37:48
Message-ID: 27356.1500478668@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Dmitry Lazurkin <dilaz03(at)gmail(dot)com> writes:
> I am trying to find workaround for cross-column statistics.
> ...
> Worn estimate. Planner doesn't use statistics. In code I see usage of
> function scalargtsel which returns default selectivity because
> ROW('tag1', 0.9)::tag_sim is not Const.

Yeah, that's because eval_const_expressions doesn't know how to fold
a constant RowExpr to a simple Const. I have a patch laying about
someplace to improve that, but I keep forgetting about it until
we're in beta phase :-(. In the meantime you could perhaps do the
folding by hand:

regression=# EXPLAIN ANALYZE SELECT * FROM tags WHERE ROW(t, s)::tag_sim >= '(tag1,0.9)'::tag_sim AND
ROW(t, s)::tag_sim <= '(tag1,1.0)'::tag_sim;
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------
Index Scan using tags_composite on tags (cost=0.29..8.30 rows=1 width=13) (actual time=0.051..0.051 rows=0 loops=1)
Index Cond: ((ROW(t, s)::tag_sim >= '(tag1,0.9)'::tag_sim) AND (ROW(t, s)::tag_sim <= '(tag1,1)'::tag_sim))
Planning time: 0.230 ms
Execution time: 0.110 ms
(4 rows)

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Stephen Frost 2017-07-19 15:54:53 Re: Planner statistics usage for composite type
Previous Message Dmitry Lazurkin 2017-07-19 15:18:32 Planner statistics usage for composite type