Re: How to read query plan - Mailing list pgsql-performance

From Miroslav Šulc
Subject Re: How to read query plan
Date
Msg-id 423556B8.4020500@startnet.cz
Whole thread Raw
In response to Re: How to read query plan  (PFC <lists@boutiquenumerique.com>)
Responses Re: How to read query plan  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: How to read query plan  (John Arbash Meinel <john@arbash-meinel.com>)
List pgsql-performance
PFC wrote:

>
>     Instead of a varchar(1) containing 'y' or 'n' you could use a BOOL
> or an  integer.

Sure I could. The problem is our project still supports both MySQL and
PostgreSQL. We used enum('Y','N') in MySQL so there would be a lot of
changes in the code if we would change to the BOOL data type.

>     Your query seems of the form :
>
>     SELECT FROM main_table LEFT JOIN a lot of tables ORDER BY sort_key
> LIMIT  N OFFSET M;
>
>     I would suggest to rewrite it in a simpler way : instead of
> generating  the whole result set, sorting it, and then grabbing a
> slice, generate only  the ror id's, grab a slice, and then generate
> the full rows from that.
>
>     - If you order by a field which is in main_table :
>     SELECT FROM main_table LEFT JOIN a lot of tables WHERE
> main_table.id IN  (SELECT id FROM main_table ORDER BY sort_key LIMIT N
> OFFSET M
> ) ORDER BY sort_key LIMIT N OFFSET M;
>
>     - If you order by a field in one of the child tables, I guess you
> only  want to display the rows in the main table which have this
> field, ie.  not-null in the LEFT JOIN. You can also use the principle
> above.
>
>     - You can use a straight join instead of an IN.

Do you mean something like this?

SELECT Table.IDPK, Table2.varchar1, Table2.varchar2, ...
FROM Table
LEFT JOIN many tables
INNER JOIN Table AS Table2

Miroslav

Attachment

pgsql-performance by date:

Previous
From: Miroslav Šulc
Date:
Subject: Re: How to read query plan
Next
From: Richard Huxton
Date:
Subject: Re: Performance tuning