Hi Leute,
Bei genauerem drüber nachdenken ist fusers lösung vielleicht doch nicht so elegant:
Nehmen wior mal folgendes an :
1.) es soll ein Zeitraum von 2 Jahren abgedeckt werden, d.h. die Tabelle Zahl hat minumum 730 Zeilen (Ein für jeden Tag)
2.) In der Tabelle Artikel liegen ca. 1000 Angebote
Wenn ich SQL richtig gelernt habe und hier jetzt nicht auf dem Schlauch stehe bedeutet Fusers Join ein kleines Performance disaster :
Schliesslich wierden hier die Tabellen mit 1=1 verbunden und nicht über Felder! Was dann soviel heisst wie jede Zeile aus Tabelle Artikel mit jeder Zeile aus Tabelle Zahl die dann wieder mit
zusammengeführ und reduzeirt werden !
Also überschlagen wir :
1000 Artikel * 730 Tage = 730.000 Zeilenoperationen
GROUP by 1 müsste in etwa noch einmal einen Durchlauf von 1000 Operationen bringen (das weiss ich allerdings nicht wirklich abzuschätzen da hier Durchlauf nicht wirklich = Operation)
Also kommen wir auf eine Performance kurve :
Artikel Tage Operationen
im
Intervall
100 50 500000
200 100 4000000
300 150 13500000
400 200 32000000
500 250 62500000
600 300 108000000
700 350 171500000
800 400 256000000
900 450 364500000
1000 500 500000000
1100 550 665500000
1200 600 864000000
1300 650 1098500000
1400 700 1372000000
1500 750 1687500000
1600 800 2048000000
1700 850 2456500000
1800 900 2916000000
1900 950 3429500000
2000 1000 4000000000
Interesssant !! aber nicht elegant und sicher nicht rentabel
Bei genauerem drüber nachdenken ist fusers lösung vielleicht doch nicht so elegant:
Nehmen wior mal folgendes an :
1.) es soll ein Zeitraum von 2 Jahren abgedeckt werden, d.h. die Tabelle Zahl hat minumum 730 Zeilen (Ein für jeden Tag)
2.) In der Tabelle Artikel liegen ca. 1000 Angebote
Wenn ich SQL richtig gelernt habe und hier jetzt nicht auf dem Schlauch stehe bedeutet Fusers Join ein kleines Performance disaster :
From ZAHL A left join ARTIKEL B on 1=1
group by 1
Also überschlagen wir :
1000 Artikel * 730 Tage = 730.000 Zeilenoperationen
GROUP by 1 müsste in etwa noch einmal einen Durchlauf von 1000 Operationen bringen (das weiss ich allerdings nicht wirklich abzuschätzen da hier Durchlauf nicht wirklich = Operation)
Also kommen wir auf eine Performance kurve :
Artikel Tage Operationen
im
Intervall
100 50 500000
200 100 4000000
300 150 13500000
400 200 32000000
500 250 62500000
600 300 108000000
700 350 171500000
800 400 256000000
900 450 364500000
1000 500 500000000
1100 550 665500000
1200 600 864000000
1300 650 1098500000
1400 700 1372000000
1500 750 1687500000
1600 800 2048000000
1700 850 2456500000
1800 900 2916000000
1900 950 3429500000
2000 1000 4000000000
Interesssant !! aber nicht elegant und sicher nicht rentabel
Kommentar