Hallo zusammen,
habe Probleme mit dem folgenden SQL, er erscheint mir extrem langsam :
SELECT
int4(1000000/float8((sum(sj)+sum(parts)))*sum(fehler)),
to_char(max(r_date), 'DY')
FROM aoi_auswertung
WHERE
r_date like '2014-04-08%'
AND loetproz='REFLOW'
AND prod_art='SER'
AND ds_r_ok=1
GROUP by date(r_date)
SELECT int4(1000000/float8((sum(sj)+sum(parts)))*sum(fehler)),
to_char(max(r_date), 'DY')
FROM aoi_auswertung
WHERE
date(r_date) = '2014-04-08'
AND loetproz='REFLOW'
AND prod_art='SER'
AND ds_r_ok=1
GROUP by date(r_date)
Wie kann ich die Gruppierung anders lösen? Hab da keine Idee
Ich denke, Dein Problem ist, daß Du einen Text-Typ für einen DATE-Typ vergewaltigst. Ein funktionaler Index auf der Spalte mag helfen, aber das wäre nur ein Würgaround. Besser: korrekte Datentypen verwenden. Immer.
hmm, ich habe die Spalte r_date als “timestamp with time Zone” definiert, benötige jetzt aber eben eine Gruppierung
des Datums, nicht der Uhrezit zusätzlich. Heißt das ich sollte eine Zusatzsplate in der Tabelle vom Typ date haben? Könnte das helfen?
Jetzt schreib ich das zum dritten Mal, weil ich irgnwie immer aus der Anmeldung flieg …
Das Problem ist, daß timestamp with time zone halt von der Zeitzone anhängt. Nachts um 2 Uhr in Tokio ist ein anderes Datum als gleichzeitig in New York.
Versuch mal einen Index wie folgt zu setzen: (mit Explain-Demo)
test=# create table minor (ts timestamptz);
CREATE TABLE
Time: 0,936 ms
test=*# create index idx_ts on minor (((ts)));
CREATE INDEX
Time: 5,370 ms
test=*# set enable_seqscan to false;
SET
Time: 0,047 ms
test=*# explain select * from minor where ts::date = current_date;
QUERY PLAN
-------------------------------------------------------------------------
Bitmap Heap Scan on minor (cost=14.86..67.66 rows=11 width=8)
Filter: ((ts)::date = ('now'::cstring)::date)
-> Bitmap Index Scan on idx_ts (cost=0.00..14.86 rows=2140 width=0)
(3 rows)