Pessoal,

Dado o select+explain abaixo, quero ajuda de vocês para saber o que deve
ser levado em consideração no explain para uma possível melhora no select.

Em relação ao explain, o que pode ser melhorado na consulta para uma
performance melhor?

CREATE OR REPLACE VIEW vconsulta_datalog AS
SELECT coordenada, latitude, longitude, horarioi -(horarioutc-horario) AS
horacerta,
latitudeq, longitudeq, mediatype,
cmc.categoria_mensagem_cliente,d.id_modulo
FROM datalog d
JOIN mensagens_cliente mc ON mc.id_mensagem = d.id_mensagem
JOIN categoria_mensagem_cliente cmc ON cmc.id_categoria_mensagem_cliente =
mc.id_categoria_mensagem_cliente
WHERE (latitude IS NOT NULL) AND (longitude IS NOT NULL) AND (horarioutc IS
NOT NULL) AND (horario IS NOT NULL) AND (latitudeq IS NOT NULL) AND
(longitudeq IS NOT NULL);

EXPLAIN ANALYSE
SELECT coordenada, latitude, longitude, horacerta, latitudeq, longitudeq,
mediatype, categoria_mensagem_cliente
FROM vconsulta_datalog
WHERE (id_modulo = '6')
AND (horacerta BETWEEN '2012-06-16 00:00:00' AND '2012-06-16 23:00:00')


"Nested Loop  (cost=354061.26..1273339.98 rows=124 width=51) (actual
time=64712.690..130988.989 rows=494 loops=1)"
"  Join Filter: (mc.id_categoria_mensagem_cliente =
cmc.id_categoria_mensagem_cliente)"
"  Rows Removed by Join Filter: 2964"
"  ->  Hash Join  (cost=354061.26..1273325.26 rows=124 width=48) (actual
time=64712.642..130977.716 rows=494 loops=1)"
"        Hash Cond: ((mc.id_mensagem)::numeric = d.id_mensagem)"
"        ->  Seq Scan on mensagens_cliente mc  (cost=0.00..785230.84
rows=26806384 width=8) (actual time=6.001..35041.135 rows=26806383 loops=1)"
"        ->  Hash  (cost=354054.08..354054.08 rows=574 width=50) (actual
time=62118.059..62118.059 rows=494 loops=1)"
"              Buckets: 1024  Batches: 1  Memory Usage: 42kB"
"              ->  Bitmap Heap Scan on datalog d  (cost=7440.97..354054.08
rows=574 width=50) (actual time=3086.930..62116.382 rows=494 loops=1)"
"                    Recheck Cond: ((id_modulo = 6::numeric) AND (latitude
IS NOT NULL) AND (longitude IS NOT NULL) AND (horarioutc IS NOT NULL) AND
(horario IS NOT NULL) AND (latitudeq IS NOT NULL) AND (longitudeq IS NOT
NULL))"
"                    Filter: (((horarioi - (horarioutc - horario)) >=
'2012-06-16 00:00:00'::timestamp without time zone) AND ((horarioi -
(horarioutc - horario)) <= '2012-06-16 23:00:00'::timestamp without time
zone))"
"                    Rows Removed by Filter: 246473"
"                    ->  Bitmap Index Scan on datalog_index_fields_idx
(cost=0.00..7440.82 rows=114736 width=0) (actual time=299.919..299.919
rows=246967 loops=1)"
"                          Index Cond: ((id_modulo = 6::numeric) AND
(latitude IS NOT NULL) AND (longitude IS NOT NULL) AND (horarioutc IS NOT
NULL) AND (horario IS NOT NULL) AND (latitudeq IS NOT NULL) AND (longitudeq
IS NOT NULL))"
"  ->  Materialize  (cost=0.00..1.11 rows=7 width=11) (actual
time=0.001..0.008 rows=7 loops=494)"
"        ->  Seq Scan on categoria_mensagem_cliente cmc  (cost=0.00..1.07
rows=7 width=11) (actual time=0.004..0.012 rows=7 loops=1)"
"Total runtime: 130991.233 ms"

[]s
Danilo
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a