BUG #16377: select stuck when use order by and limit 1 if order-by-field has one index and result has no records

Started by PG Bug reporting formabout 6 years ago2 messagesbugs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

The following bug has been logged on the website:

Bug reference: 16377
Logged by: Yunfeng Wang
Email address: kingyzf@outlook.com
PostgreSQL version: 11.6
Operating system: Centos 7.6
Description:

select stuck when use order by and limit 1 if order-by-field has one
index:
and possibility is high if result has no records, otherwise possibility is
low;
if no "limit 1" or no index on column pay_date, no problem;

sql:
select * from
(select ( case when pre_pay is null then 0 else pre_pay end ) as "PRE_PAY"

from inpatientprepay
where cancel='0'
and ehrid=4
order by pay_date desc
) as t
limit 1
;
other info: the inpatientprepay table has nine million records, I think
it's stuck because if no limit 1 ,speed is ok;

#2Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: PG Bug reporting form (#1)
Re: BUG #16377: select stuck when use order by and limit 1 if order-by-field has one index and result has no records

Hi,

On Sat, Apr 18, 2020 at 10:04:05AM +0000, PG Bug reporting form wrote:

The following bug has been logged on the website:

Bug reference: 16377
Logged by: Yunfeng Wang
Email address: kingyzf@outlook.com
PostgreSQL version: 11.6
Operating system: Centos 7.6
Description:

select stuck when use order by and limit 1 if order-by-field has one
index:
and possibility is high if result has no records, otherwise possibility is
low;
if no "limit 1" or no index on column pay_date, no problem;

sql:
select * from
(select ( case when pre_pay is null then 0 else pre_pay end ) as "PRE_PAY"

from inpatientprepay
where cancel='0'
and ehrid=4
order by pay_date desc
) as t
limit 1
;
other info: the inpatientprepay table has nine million records, I think
it's stuck because if no limit 1 ,speed is ok;

I think we need to see execution plans for both queries.

Also, when you say "stuck" what does that mean? Does it mean it's
waiting on a lock, or is it doing something but not producing results?
Or what?

regards

--
Tomas Vondra http://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services