From: | "Albe Laurenz" <laurenz(dot)albe(at)wien(dot)gv(dot)at> |
---|---|
To: | "David Popiashvili *EXTERN*" <dato0011(at)hotmail(dot)com>, <pgsql-performance(at)postgresql(dot)org> |
Subject: | Re: PostgreSQL strange query plan for my query |
Date: | 2012-11-16 12:55:41 |
Message-ID: | D960CB61B694CF459DCFB4B0128514C208B87C48@exadv11.host.magwien.gv.at |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-performance |
David Popiashvili wrote:
> I have database with few hundred millions of rows. I'm running the
following query:
>
> select * from "Payments" as p
> inner join "PaymentOrders" as po
> on po."Id" = p."PaymentOrderId"
> inner join "Users" as u
> On u."Id" = po."UserId"
> INNER JOIN "Roles" as r
> on u."RoleId" = r."Id"
> Where r."Name" = 'Moses'
> LIMIT 1000
> When the where clause finds a match in database, I get the result in
several milliseconds, but if I
> modify the query and specify a non-existent r."Name" in where clause,
it takes too much time to
> complete. I guess that PostgreSQL is doing a sequential scan on the
Payments table (which contains the
> most rows), comparing each row one by one.
> Isn't postgresql smart enough to check first if Roles table contains
any row with Name 'Moses'?
>
> Roles table contains only 15 row, while Payments contains ~350
million.
>
> I'm running PostgreSQL 9.2.1.
> Here'e explain analyse results: http://explain.depesz.com/s/7e7
Can you also show the plan for the good case?
Yours,
Laurenz Albe
From | Date | Subject | |
---|---|---|---|
Next Message | David Popiashvili | 2012-11-16 13:04:05 | Re: PostgreSQL strange query plan for my query |
Previous Message | David Popiashvili | 2012-11-16 11:40:52 | PostgreSQL strange query plan for my query |