porque no emplea indice para algunas funciones agregadas (max,min)

From: Hellmuth Vargas <hivs77(at)gmail(dot)com>
To: Lista Postgres ES <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: porque no emplea indice para algunas funciones agregadas (max,min)
Date: 2019-11-29 15:09:52
Message-ID: CAN3Qy4rkOq7Lxn1JHrmmcX3fY1YVjD9mM6qzgYbmaPTV-A-eqw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola lista

tengo una tabla

CREATE TABLE oportunidadcitas
(
id bigint NOT NULL,
fechacreacion timestamp without time zone,
fechamodificacion timestamp without time zone,
centrocodigo character varying(255),
especialidadcodigo character varying(255),
medicocodigo character varying(255),
CONSTRAINT oportunidadcitas_pkey PRIMARY KEY (id)
)

con el siguiente indice (entre otros)

CREATE INDEX idx_ oportunidadcitas_desc
ON oportunidadcitas
USING btree
( centrocodigo COLLATE pg_catalog."default", id DESC);

donde suponía que podrá apoyar una consulta recurrente que hacen:

select centrocodigo,max( id ) as ultimo
from oportunidadcitas
group by 1

Pero el motor siempre prefiere hacer el sequence scan:

HashAggregate (cost=7307.83..7307.85 rows=5 width=21) (actual
time=122.891..122.893 rows=5 loops=1)
Group Key: centrocodigo
-> Seq Scan on oportunidadcitas (cost=0.00..7159.26 rows=148566
width=21) (actual time=0.011..43.675 rows=148624 loops=1)
Planning time: 0.101 ms
Execution time: 122.928 ms

La pregunta es: porque si tiene un indice por ambos campos e incluso esta
ordenado por id desc porque no lo emplea para sacar el máximo??? ( ni el
mínimo) como si lo emplea si solo se hace el max por id:

select max( id )
from subred.baseoportunidadcitabot sub

Result (cost=0.14..0.15 rows=1 width=0)
InitPlan 1 (returns $0)
-> Limit (cost=0.08..0.14 rows=1 width=8)
-> Index Only Scan Backward using idx_ oportunidadcitas_desc on
oportunidadcitas (cost=0.08..9988.24 rows=165172 width=8)
Index Cond: (id IS NOT NULL)

Postdata: la idea es sacarlo directamente porque varias publicaciones
sugieren emplear trigger o vistas materializadas para almacenar el dato.

de antemano Gracias!!!

--
Cordialmente,

Ing. Hellmuth I. Vargas S.
Esp. Telemática y Negocios por Internet

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Olivier Gautherot 2019-11-29 15:24:23 Re: porque no emplea indice para algunas funciones agregadas (max,min)
Previous Message FLOR AVILA ELIAS 2019-11-20 18:55:45 Re: Delete en tabla