Zitat:
Zitat von nico.skarwan
Meinst du, das die Performance soweit besser werden würde, wenn ich die Sekundenzeiten in eine Eigende Datenbank übertragen würde und diese dann in ein anderes Format umwanlde?
|
Die Performance würde um einige Zehnerpotenzen besser werden mit einem funktionalen Index. Bei deinem vergurkten Datentypen so:
Code:
test=*# \d dumme_zeiten
Table "public.dumme_zeiten"
Column | Type | Modifiers
--------+---------+-----------
zeit | integer |
test=*# create index idx1 on dumme_zeiten (extract(hour from 'epoch'::timestamp + zeit * '1second'::interval));
CREATE INDEX
Besser wäre, wie schon gesagt, korrekte Datentypen. Würde Deine Abfrage vereinfachen, aber da MySQL auf Funktionen keine Indexe machen kann, kein Performancevorteil.
Aber es wäre einfacher lesbar.
Code:
test=# alter table dumme_zeiten alter column zeit type timestamp using ('epoch'::timestamp + zeit * '1second'::interval);
ALTER TABLE
Time: 1,730 ms
test=*# create index idx1 on dumme_zeiten (extract (hour from zeit));
CREATE INDEX
Time: 5,289 ms
test=*# set enable_seqscan to off;
SET
Time: 0,054 ms
test=*# explain analyse select * from dumme_zeiten where extract(hour from zeit) = 10;
QUERY PLAN
-------------------------------------------------------------------------------------------------------------------
Index Scan using idx1 on dumme_zeiten (cost=0.14..8.16 rows=1 width=8) (actual time=0.021..0.022 rows=1 loops=1)
Index Cond: (date_part('hour'::text, zeit) = 10::double precision)
Planning time: 0.215 ms
Execution time: 0.039 ms
(4 rows)