Any other idea how to resolve the performance issue with the database view?

On Fri, Mar 29, 2019 at 7:38 PM Raj Gandhi <raj01gan...@gmail.com> wrote:

> Merlin,  I tried the hack you suggested but that didn't work. Planner used
> the same path.
>
> The same query works much faster when using the raw SQL instead of  DB
> view:
>
> Here is the definition of DB View ‘job’
>
>  SELECT w.id,
>
>     w.parent_id,
>
>     w.status AS state,
>
>     w.percent_complete AS progress_percentage,
>
>     w.start_time,
>
>     w.end_time,
>
>     w.est_completion_time AS estimated_completion_time,
>
>     w.root_id,
>
>     w.internal AS is_internal,
>
>     w.order_id AS step_order,
>
>     c.resource_type,
>
>     c.resource_id,
>
>     c.id AS command_id,
>
>     c.client_cookie,
>
>     c.user_name AS "user",
>
>     c.metadata,
>
>     c.client_address,
>
>     response_body(r.*, w.*) AS response_body
>
>    FROM work_unit w
>
>      LEFT JOIN command c ON c.work_unit_id = w.id
>
>      LEFT JOIN command_response r ON r.command_id::text = c.id::text;
>
>
>
>
>
> *Query that uses the DB view:*
>
> SELECT id, start_time
>
> FROM job
>
> order by id  LIMIT 101 OFFSET 0;
>
>
>
> Explain plan: https://explain.depesz.com/s/gzjQ
>
>
>  *Query using the raw SQL*
>
> <SQL from Job DB View definition>
>
> ORDER BY id LIMIT 101 OFFSET 0;
>
>
>
> Explain plan:https://explain.depesz.com/s/KgwO
>
>
>
>
>
> On Fri, Mar 29, 2019 at 11:26 AM Merlin Moncure <mmonc...@gmail.com>
> wrote:
>
>> On Thu, Mar 28, 2019 at 5:44 PM Raj Gandhi <raj01gan...@gmail.com> wrote:
>> >
>> > + pgsql-performance
>> >
>> > On Thu, Mar 28, 2019 at 6:41 PM Raj Gandhi <raj01gan...@gmail.com>
>> wrote:
>> >>
>> >> Hi everyone,
>> >>
>> >>
>> >>
>> >> I’m using LIMIT offset with DB view. Looks like query planner is
>> applying the LIMIT for DB view at the end after processing all rows.
>> >>
>> >> When running same SQL that was used to create the DB view, LIMIT is
>> applied earlier so the query is much faster.
>> >>
>> >>
>> >>
>> >> Explain plan using DB view
>> >>
>> >> https://explain.depesz.com/s/gzjQ
>> >>
>> >>
>> >>
>> >> Explain plan using raw SQL
>> >>
>> >> https://explain.depesz.com/s/KgwO
>> >>
>> >>
>> >>
>> >> In both tests LIMIT was 100 with offset  = 0.
>> >>
>> >> Is there any way to force DB view to apply limit earlier?
>>
>> huh. OFFSET does indeed force a materialize plan.   This is a widely
>> used tactic to hack the planner ('OFFSET 0').
>>
>> Maybe try converting your query from something like:
>>
>> SELECT * FROM foo LIMIT m OFFSET N;
>> to
>> WITH data AS
>> (
>>   SELECT * FROM foo LIMIT m + n
>> )
>> SELECT * FROM foo OFFSET n;
>>
>> I didn't try this, and it may not help, but it's worth a shot.
>>
>> merlin
>>
>

Reply via email to