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
Re: How to read query plan |
Список | 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 по дате отправления: