Matheus,

Segui as suas sugestões, criei o indice *(trip_program_id,
begintimestamp, COALESCE(endtimestamp, 'infinity')**)* que não surtiu muito
efeito e em seguida mudei a consulta conforme você sugeriu, neste eu tive
um resultado considerável, baixou para 28845.757 ms.

SELECT '' as linha, '00:00' as nome,vehicle.vehiclecode as vehiclecode,
vehicle.vehiclecode as codonibus,vehicle.vehicleid as vehicleVehicleid,
public.vehicle.company_id as companyId, tb_company.name as companyName
from public.vehicle, tb_company where public.vehicle.company_id in ( '1' ,
'3' ) and tb_company.id = public.vehicle.company_id and
public.vehicle.enabled = true  and not exists
(select * from vehiclebusserviceplanned vbp2 where vbp2.vehicle_vehicleid =
vehicle.vehicleid and exists
(select vbp1.trip_program_id, max(vbp1.vehiclebusserviceplannedid) as
vehiclebusserviceplannedid
from vehiclebusserviceplanned vbp1 where vbp1.trip_program_id =
vbp2.trip_program_id *AND '2015-04-06' BETWEEN begintimestamp AND
COALESCE(endtimestamp, 'infinity')* group by vbp1.trip_program_id having
max(vbp1.vehiclebusserviceplannedid) = vbp2.vehiclebusserviceplannedid));



A titulo de esclarecimento segue os indices que tenho no momento.
Indexes:
    "vehiclebusserviceplanned_pkey" PRIMARY KEY, btree
(vehiclebusserviceplannedid)
    "sugestao_idx" btree (trip_program_id, begintimestamp,
(COALESCE(endtimestamp, 'infinity'::timestamp without time zone)))
    "vehiclebusserviceplanned_busservice_idx" btree (serviceid)
    "vehiclebusserviceplanned_vehicleid_idx" btree (vehicle_vehicleid)



http://explain.depesz.com/s/qlHH


No meu humildade entendimento, acredito que isto é até onde conseguimos ir.
O próximo passo é mudar na aplicação.










Em 6 de abril de 2015 17:06, Matheus de Oliveira <matioli.math...@gmail.com>
escreveu:

>
> 2015-04-06 16:58 GMT-03:00 Matheus de Oliveira <matioli.math...@gmail.com>
> :
>
>> On Mon, Apr 6, 2015 at 4:46 PM, Ariel Alves <arielalves...@gmail.com>
>> wrote:
>>
>>>                  ->  Index Scan using
>>> vehiclebusserviceplanned_tripprogramid_idx on vehiclebusserviceplanned vbp1
>>>  (cost=0.00..117.25 rows=9 width=16) (actual time=0.387..0.476 rows=0
>>> loops=736406)
>>>                        Index Cond: (trip_program_id =
>>> vbp2.trip_program_id)
>>>                        Filter: (('2015-04-06'::date >=
>>> (begintimestamp)::date) AND ('2015-04-06'::date <=
>>> COALESCE((endtimestamp)::date, '2015-04-06'::date)))
>>>
>>
>> Não analisei a consulta ainda, mas só por esse Index Scan, eu vejo que um
>> índice em (trip_program_id, begintimestamp, endtimestamp) seria útil, você
>> chegou a tentar esse índice?
>>
>
> Ah, aproveitando, se está mapeando o "endtimestamp" como sendo NULL em
> casos onde o final não é conhecido, você pode usar o 'infinity', pois
> timestamp e timestamptz aceitam '-infinity' e 'infinity'. Se quiser testar
> sem alterar a tabela, você pode usar:
>
>     ... AND '2015-04-06' BETWEEN begintimestamp AND COALESCE(endtimestamp,
> 'infinity')
>
> E um índice em:
>
>     (trip_program_id, begintimestamp, COALESCE(endtimestamp, 'infinity'))
>
> Atenciosamente,
> --
> Matheus de Oliveira
> Analista de Banco de Dados
> Dextra Sistemas - MPS.Br nível F!
> www.dextra.com.br/postgres
>
>
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>


-- 

José Ariel Ferreira Alves
arielalves...@gmail.com
ariel.al...@msn.com
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a