Langsame Query mal wieder

Geht um einen eigentlich recht einfachen Join:

explain analyse SELECT '12.11.2007 18:04:00 UTC' AS zeit,
                       'M' AS datatyp,
                       p.zs_nr AS zs_de,
	               j_ges,
                       de_mw_abh_j_lkw(mw_abh) AS j_lkw, 
                       de_mw_abh_v_pkw(mw_abh) AS v_pkw, 
                       de_mw_abh_v_lkw(mw_abh) AS v_lkw,
	               de_mw_abh_p_bel(mw_abh) AS p_bel 
	               FROM  messpunkt p, messungen_v_dat_2007_11_12 m, de_mw w
                       WHERE  m.ganglinientyp = 'M'    
		       AND 381 = m.minute_tag
                       AND (p.nr, p.mw_nr) = (m.messpunkt, w.nr);

Explain Analyze liefert folgendes:

 Nested Loop  (cost=0.00..50389.39 rows=3009 width=10) (actual time=0.503..320.872 rows=2189 loops=1)
   ->  Nested Loop  (cost=0.00..30668.61 rows=3009 width=8) (actual time=0.254..94.116 rows=2189 loops=1)
         ->  Index Scan using messungen_v_dat_2007_11_12_messpunkt_minute_tag_idx on messungen_v_dat_2007_11_12 m  (cost=0.00..5063.38 rows=3009 width=4) (actual time=0.131..9.262 rows=2189 loops=1)
               Index Cond: ((ganglinientyp = 'M'::bpchar) AND (381 = minute_tag))
         ->  Index Scan using messpunkt_nr_idx on messpunkt p  (cost=0.00..8.50 rows=1 width=12) (actual time=0.019..0.023 rows=1 loops=2189)
               Index Cond: (p.nr = m.messpunkt)
   ->  Index Scan using de_nw_nr_idx on de_mw w  (cost=0.00..6.53 rows=1 width=10) (actual time=0.019..0.023 rows=1 loops=2189)
         Index Cond: (p.mw_nr = w.nr)
 Total runtime: 329.134 ms
(9 rows)

Das ganze sieht ja schon eigentlich ganz ok aus meiner bescheidenen Meinung nach, allerdings sollte es eigentlich deutlich schneller laufen, da es in eine Funktion eingebunden ist, die sehr oft ausgeführt wird. Irgendwie sehe ich da leider sehr wenig Raum für Optimierungen, alle Tipps sind hier willkommen :slight_smile: