Re: BUG #14399: Order by id DESC causing bad query plan - Mailing list pgsql-bugs

From David G. Johnston
Subject Re: BUG #14399: Order by id DESC causing bad query plan
Date
Msg-id CAKFQuwY=54PRU1rwU86xaQMnL+5HfDngJr5=2HpZ1QyDQYDfVg@mail.gmail.com
Whole thread Raw
In response to BUG #14399: Order by id DESC causing bad query plan  (jkoceniak@mediamath.com)
Responses Re: BUG #14399: Order by id DESC causing bad query plan
List pgsql-bugs
On Thu, Oct 27, 2016 at 5:16 PM, <jkoceniak@mediamath.com> wrote:

> The following bug has been logged on the website:
>
> Bug reference:      14399
> Logged by:          Jamie Koceniak
> Email address:      jkoceniak@mediamath.com
> PostgreSQL version: 9.4.6
> Operating system:   Linux
> Description:
>
> One table has 2M records (orders) joining to another table with 75K recor=
ds
> (customers).
>
> Query:
> select *  FROM
>           orders t1
>           JOIN customer t2 ON (t1.customer_id =3D t2.id)

        WHERE
>           t2.id IN (select distinct customer_id from valid_customers)

        ORDER BY t1.id
>         LIMIT 10 ;
>

=E2=80=8BBug potential aside the better way to write =E2=80=8Bthat is to us=
e a proper
semi-join (i.e., EXISTS)

SELECT *
FROM order t1
JOIN customer t2 ON (t1.customer_id =3D t2.id)
WHERE EXISTS (SELECT 1 FROM valid_customers t3 WHERE t3.customer_id =3D t2.=
id)
ORDER BY t1.id
LIMIT 10;

Note too that your query plan has a "function scan" node unlike what your
query implies...

Sorry I can't be of more help with the information you've provided.

David J.

pgsql-bugs by date:

Previous
From: jkoceniak@mediamath.com
Date:
Subject: BUG #14399: Order by id DESC causing bad query plan
Next
From: Tom Lane
Date:
Subject: Re: BUG #14408: Schema not found error when 2 or more indices declared on temporary table