and r.item_id = i.item_id redundant? The query will at most select one row anyway, because of the
and r.item_id = '7416' and r.revision_id = i.live_revisionDoes it bring any secret performance benefits, or is it just oversight?
Jun, the reason why the query is slow is propably because it executes the
acs_permission__permission_p for much more rows than necessary. If the optimizer would choose to first narrow the rows using the other conditions in the where clause then it would be much faster, because the stored procedure would be executed only once at maximum.
My only suggestion for improving this is to extract most of the query into a subquery and wrap the query part with
acs_permission__permission_p around it. Maybe there are other ways that I don't know of.
Throwing away rows at the tcl level is bad practice and I would vote against adding something like that to the toolkit, although in this particular case it is only one row that gets thrown away so not a big deal. Also note that it might work fast on oracle as it is.