Re: rows estimate in explain analyze for the BRIN index

From: Oleksii Kliukin <alexk(at)hintbits(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: emre(at)hasegeli(dot)com, Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: rows estimate in explain analyze for the BRIN index
Date: 2015-12-30 20:29:59
Message-ID: CDAD48AE-D091-40E7-8EAC-B7565E1C2459@hintbits.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


> On 30 Dec 2015, at 21:12, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
>
> Emre Hasegeli <emre(at)hasegeli(dot)com> writes:
>>> I don’t see how to solve this problem without changing explain analyze output to accommodate for “unknown” value. I don’t think “0” is a non-confusing representation of “unknown” for most people, and from the practical standpoint, a “best effort” estimate is better than 0 (i.e. I will be able to estimate how efficient BRIN index is for my tables in terms of the number of tuples retrieved/thrown away)
>
> We do already have a nearby precedent for returning zero when we don't
> have an accurate answer: that's what BitmapAnd and BitmapOr plan nodes
> do. (This is documented btw, at the bottom of section 14.1.)

+1 for following a precedent.

>
>> The number of retrieved and thrown away rows are already available on
>> the upper part of the plan. Bitmap Index Scan should provide the rows
>> that matched the index.
>
> It doesn't have that information.
>
>> Another alternative would be just returning
>> the number of matching pages (by not multiplying with 10). It might
>> be better understood.
>
> No, it would not, at least not unless we found a way to explicitly mark
> the output as being blocks not rows (which would doubtless break a lot of
> existing client-side code). Zero is fairly clearly an impossible value,
> whereas anything that's not zero is going to be taken at face value by
> many users.

But is it? Is it impossible for the BRIN bitmap index scan to return 0 rows (say, if the value being matched is outside the min/max boundary for every block range?) Granted, if we document that it always returns 0 and should be ignored, then confusing the actual 0 with the 0 as a representation of “unknown” would be less a problem.

--
Oleksii

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message David Rowley 2015-12-30 21:03:36 Re: More thorough planning for OLAP queries (was: [PATCH] Equivalence Class Filters)
Previous Message Alvaro Herrera 2015-12-30 20:26:05 Re: On columnar storage (2)