Re: How to read query plan

Поиск
Список
Период
Сортировка
От Miroslav Šulc
Тема Re: How to read query plan
Дата
Msg-id 423556B8.4020500@startnet.cz
обсуждение исходный текст
Ответ на Re: How to read query plan  (PFC <lists@boutiquenumerique.com>)
Ответы 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>)
Список 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

Вложения

В списке pgsql-performance по дате отправления:

Предыдущее
От: Miroslav Šulc
Дата:
Сообщение: Re: How to read query plan
Следующее
От: Richard Huxton
Дата:
Сообщение: Re: Performance tuning