Datenabfrage zu langsam

  1. mit GUI kenne ich mich nicht aus
  2. ein select ohne where macht natürlich IMMER einen Seq Scan.
  3. die actual time oben beträgt 0.440 ms, totale Laufzeit 0.606ms

Wenn das also Deiner Meinung nach 2 Sekunden dauert, dann liegt das nicht an PostgreSQL.

Andreas

Ja das war so schnell, weil die Verbindung auch nicht über das Internet war. Wenn ich das jetzt von Außerhalb mache und dann die selbe Abfrage mache, dauert das schon 1 sec, bei 100 Zeilen.
Du meintest ja das du 1.00.000 Zeilen in ein paar ms auslesen kannst.
also muss das dann doch schon etwas langsamer bei mir sein.

"Seq Scan on calendar  (cost=1.24..8818.72 rows=12 width=228) (actual time=0.183..0.909 rows=49 loops=1)"
"  Filter: ((((starttime >= '2007-12-10 00:00:00'::timestamp without time zone) AND (starttime <= '2007-12-17 00:00:00'::timestamp without time zone)) OR (recurrency IS NOT NULL)) AND ((hashed subplan) OR ((id_user = 13) AND ((status <> 4) OR (NOT erledigt))) OR (((id_user = 10) OR (id_user = 12)) AND (status <> 4) AND ((status <> 2) OR (subplan)))))"
"  SubPlan"
"    ->  Seq Scan on privat_rechte  (cost=0.00..35.50 rows=1 width=4) (actual time=0.004..0.004 rows=0 loops=36)"
"          Filter: (sehen AND (vonuser = $2) AND (zuuser = 13))"
"    ->  Seq Scan on userintermin  (cost=0.00..1.24 rows=1 width=4) (actual time=0.012..0.012 rows=0 loops=1)"
"          Filter: (users = 13)"
"    ->  Index Scan using adress_pkey on adress  (cost=0.00..3.83 rows=1 width=14) (actual time=0.001..0.001 rows=0 loops=49)"
"          Index Cond: (idadress = $0)"
"    ->  Index Scan using adress_pkey on adress  (cost=0.00..3.83 rows=1 width=9) (actual time=0.001..0.001 rows=0 loops=49)"
"          Index Cond: (idadress = $0)"
"Total runtime: 1.009 ms"

Abgesehen davon, hat jemand einen Plan, warum die Abfrage über pgAdmin 1sec dauer und über mein Programm 9sec???

Ja das war so schnell, weil die Verbindung auch nicht über das Internet war. Wenn ich das jetzt von Außerhalb mache und dann die selbe Abfrage mache, dauert das schon 1 sec, bei 100 Zeilen.
Du meintest ja das du 100.000 Zeilen in ein paar ms auslesen kannst.
also muss das dann doch schon etwas langsamer bei mir sein.

"Seq Scan on calendar  (cost=1.24..8818.72 rows=12 width=228) (actual time=0.183..0.909 rows=49 loops=1)"
"  Filter: ((((starttime >= '2007-12-10 00:00:00'::timestamp without time zone) AND (starttime <= '2007-12-17 00:00:00'::timestamp without time zone)) OR (recurrency IS NOT NULL)) AND ((hashed subplan) OR ((id_user = 13) AND ((status <> 4) OR (NOT erledigt))) OR (((id_user = 10) OR (id_user = 12)) AND (status <> 4) AND ((status <> 2) OR (subplan)))))"
"  SubPlan"
"    ->  Seq Scan on privat_rechte  (cost=0.00..35.50 rows=1 width=4) (actual time=0.004..0.004 rows=0 loops=36)"
"          Filter: (sehen AND (vonuser = $2) AND (zuuser = 13))"
"    ->  Seq Scan on userintermin  (cost=0.00..1.24 rows=1 width=4) (actual time=0.012..0.012 rows=0 loops=1)"
"          Filter: (users = 13)"
"    ->  Index Scan using adress_pkey on adress  (cost=0.00..3.83 rows=1 width=14) (actual time=0.001..0.001 rows=0 loops=49)"
"          Index Cond: (idadress = $0)"
"    ->  Index Scan using adress_pkey on adress  (cost=0.00..3.83 rows=1 width=9) (actual time=0.001..0.001 rows=0 loops=49)"
"          Index Cond: (idadress = $0)"
"Total runtime: 1.009 ms"

Abgesehen davon, hat jemand einen Plan, warum die Abfrage über pgAdmin 1sec dauer und über mein Programm 9sec???

1sec ist aber nur eine recht grobe Schätzung für etwas, was laut explain “Total runtime: 1.009 ms” dauert.

Kann es sein, daß lediglich die Übertragung der Daten so lange dauert?


Abgesehen davon, hat jemand einen Plan, warum die Abfrage über pgAdmin 1sec dauer und über mein Programm 9sec???

Beides lokal bzw. beides remote?

Andreas

Kann es sein, daß lediglich die Übertragung der Daten so lange dauert?

Das habe ich mir auch schon gedacht.

Ja, beides Lokal, außer halt die Datenbank, die sitzt auf nem Server, auf den ich von außen mit OpenVPN zugreife.

Okay. PGAdmin greift sicherlich direkt auf die DB zu, Dein Programm via ODBC. Wenn ODBC eine Verbindung aufbaut, wird erst einmal ein ganzer Batzen übertragen (Systemtabellen etc.). Hält Dein Programm die Verbindung offen oder wird sie immer wieder neu aufgebaut? Du könntest auch mit pass through probieren, das schneller zu bekommen.

Ansonsten: mit ODBC und so kann ich nicht weiter dienen.

Andreas

mein Programm hält die Verbindung offen.
Nagut. dann wird das wohl doch an meiner App. liegen. ich werde dann da mal weiter suchen.
Vielen Danke für die Hilfe.

Gruß Manu