Re: Query issue/8.0.1/Serendipity - Mailing list pgsql-sql

From Michael Glaesemann
Subject Re: Query issue/8.0.1/Serendipity
Date
Msg-id a5c61556de7ac42a8e84e857dcff3988@myrealbox.com
Whole thread Raw
In response to Query issue/8.0.1/Serendipity  (Larry Rosenman <ler@lerctr.org>)
Responses Re: Query issue/8.0.1/Serendipity  (Larry Rosenman <ler@lerctr.org>)
List pgsql-sql
Larry,

Restating your SQL in a more reader-friendly form:

SELECT timestamp
FROM serendipity_entries e    , serendipity_category c    , serendipity_entrycat ec
LEFT OUTER JOIN serendipity_entryproperties ep_cache_extended    ON (e.id = ep_cache_extended.entryid        AND
ep_cache_extended.property= 'ep_cache_extended')
 
LEFT OUTER JOIN serendipity_entryproperties ep_cache_body    ON (e.id = ep_cache_body.entryid        AND
ep_cache_body.property= 'ep_cache_body')
 
LEFT OUTER JOIN serendipity_entryproperties ep_access    ON (e.id = ep_access.entryid        AND ep_access.property =
'ep_access')
LEFT JOIN serendipity_entryproperties ep_sticky    ON (e.id = ep_sticky.entryid        AND ep_sticky.property =
'ep_is_sticky')
WHERE e.timestamp >= 1109656800    AND e.timestamp <= 1112335200    AND e.timestamp <= 1110241185    AND e.isdraft =
'false'   AND ( ep_access.property IS NULL        OR ep_access.value = 'member'        OR ep_access.value = 'public'
   OR (ep_access.value = 'private'            AND e.authorid = 1)        )    AND e.id = ec.entryid    AND c.categoryid
=ec.categoryid    AND c.category_left BETWEEN 3 AND 4
 


I can see you're using a lot of left joins. You are beginning your left 
joins off of ec, so I believe neither e nor c can be referenced as join 
conditions. It might work if you reorder the first part of the FROM 
clause as the following:

FROM serendipity_category c    , serendipity_entrycat ec    , serendipity_entries e
LEFT OUTER JOIN serendipity_entryproperties ep_cache_extended

(Though I can't be sure without seeing table definitions.)

It also appears you have a redundant e.timestamp constraint in the 
WHERE clause: if e.timestamp is >= 1110241185 it's definitely going to 
be <= 1112335200

Hope this helps. I find white space helps me read my own SQL much more 
easily.

Michael Glaesemann
grzm myrealbox com



pgsql-sql by date:

Previous
From: Larry Rosenman
Date:
Subject: Re: Query issue/8.0.1/Serendipity
Next
From: Larry Rosenman
Date:
Subject: Re: Query issue/8.0.1/Serendipity