Hi Andreas,
habe folgende Ausgansgslage
CREATE OR REPLACE VIEW v_be_artikel AS
SELECT t_be_artikel.be_artikel_id, t_be_artikel.be_artikel_menge, t_be_artikel.be_artikel_bestellung, t_be_artikel.be_artikel_artikel, t_artikel.artikel_id, t_artikel.artikel_text
FROM t_be_artikel, t_artikel
WHERE t_be_artikel.be_artikel_artikel = t_artikel.artikel_id;
Wenn ich folgende Abfrage mache
EXPLAIN SELECT * FROM v_be_artikel WHERE be_artikel_bestellung = 1
erhalte ich diese Ergebnis
“Hash Join (cost=27.27…39.42 rows=5 width=545)”
" Hash Cond: (“outer”.artikel_id = “inner”.be_artikel_artikel)"
" -> Seq Scan on t_artikel (cost=0.00…11.40 rows=140 width=520)"
" -> Hash (cost=27.25…27.25 rows=7 width=25)"
" -> Seq Scan on t_be_artikel (cost=0.00…27.25 rows=7 width=25)"
" Filter: (be_artikel_bestellung = 1)"
Habes auch mit der Funktion versucht:
CREATE OR REPLACE FUNCTION f_bestellung(int4)
RETURNS SETOF t_be_artikel AS
$BODY$
SELECT * FROM t_be_artikel WHERE be_artikel_bestellung = $1;
$BODY$
LANGUAGE 'sql' VOLATILE;
Wenn ich dann den Explain mache:
SELECT * FROM f_bestellung(1), t_artikel WHERE artikel_id = be_artikel_artikel
kommt das raus
“Hash Join (cost=11.75…38.67 rows=700 width=545)”
" Hash Cond: (“outer”.be_artikel_artikel = “inner”.artikel_id)"
" -> Function Scan on f_bestellung (cost=0.00…12.50 rows=1000 width=25)"
" -> Hash (cost=11.40…11.40 rows=140 width=520)"
" -> Seq Scan on t_artikel (cost=0.00…11.40 rows=140 width=520)"
Beides führt zum gleichen Ergebnis.
Das letztere scheint mir etwas schneller zu sein, und jetzt sind in meinen Tabellen fast noch keine Daten, werden wenn es funktioniert aber mal ziemlich viele.
Bin ich da auf dem Holzweg?
Danke Christian