Bad perf when using DECLARE CURSOR on big table

From: kimaidou <kimaidou(at)gmail(dot)com>
To: postgres performance list <pgsql-performance(at)postgresql(dot)org>
Subject: Bad perf when using DECLARE CURSOR on big table
Date: 2025-03-17 14:41:07
Message-ID: CAMKXKO6_evfQp80xx5tFkoziHW+62mHg=YKenUEb5VTdnXT=Sg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

Hi list !

I have a simple but big spatial table with approx 93 000 000 lines.

I use QGIS, the open-source GIS software to display this data. To fetch the
polygons to draw on QGIS map, QGIS launch a first DECLARE CURSOR query,
then fetch data 2000 by 2000.

I have seen that this DECLARE has bad perf compared to a simple SQL query :

Simple SQL query
=====
https://explain.dalibo.com/plan/042bc4dc2449adfe
96ms

DECLARE CURSOR for the same query
=====
https://explain.dalibo.com/plan/bh83fc0db500a79g#
171 031 ms !!

Do you have any clue about this query plan ? Should I add some table
specific weight, stats, etc. to help the DECLARE clause to use the indexes
as done for the simple SELECT ?

Regards
Michaël

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Tom Lane 2025-03-17 15:22:57 Re: Bad perf when using DECLARE CURSOR on big table
Previous Message Greg Sabino Mullane 2025-03-17 14:14:14 Re: Bulk DML performance