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.