Hallo zusammen, ich verwende Heidi-SQL und greife auf eine Maria-DB zu.
Die Performance der DB ist eigentlich recht passabel. Nun habe ich eine Abfrage mit rund 10 Subselects, die die DB offenbar an ihre Grenzen bringt. Es dauert ca. 1 Stunde, bis das Ergebnis vorliegt.
Habe hier im Forum gelesen, dass ein JOIN besser wäre. Finde aber nichts, wie man das auf die selbe Tabelle einsetzen kann.
In der Tabelle 'ber_aktuell' sind etwa 150.000 Datensätze mit 43 Spalten enthalten. Der Datumswert ist immer der gleiche. Also relativ überschaubar.
Hat jemand eine Idee, wie ich das besser machen könnte.
Danke.
Thomas
Die Performance der DB ist eigentlich recht passabel. Nun habe ich eine Abfrage mit rund 10 Subselects, die die DB offenbar an ihre Grenzen bringt. Es dauert ca. 1 Stunde, bis das Ergebnis vorliegt.
Habe hier im Forum gelesen, dass ein JOIN besser wäre. Finde aber nichts, wie man das auf die selbe Tabelle einsetzen kann.
Code:
select Tour, Datum
, (select min(zeit) from ber_aktuell where scannart='13' and Tour=t1.tour) as Erste
, (select max(zeit) from ber_aktuell where scannart='13' and Tour=t1.tour ) as Letzte
, (select count(distinct stopp) from ber_aktuell where scannart='3' and tour=t1.tour ) as Stopps
, (select count(paketnummer) from ber_aktuell where scannart='3' and tour=t1.tour ) as Uebernommen
, (select count(paketnummer) from ber_aktuell where scannart='13' and tour=t1.tour ) as Geliefert
, ROUND((select count(paketnummer) from ber_aktuell where scannart='13' and tour=t1.tour )
/ (select count(paketnummer) from ber_aktuell where scannart='3' and tour=t1.tour )*100,2) as 'Quote'
, (select count(paketnummer) from ber_aktuell where scannart='13' and tour=t1.tour and paketart=1) as BP
, (select count(paketnummer) from ber_aktuell where scannart='13' and tour=t1.tour and paketart=2) as QP
, (select count(paketnummer) from ber_aktuell where scannart='13' and tour=t1.tour and paketart=3) as SP
, ROUND((select count(paketnummer) from ber_aktuell where scannart='13' and tour=t1.tour and paketart=2)
/ (select count(paketnummer) from ber_aktuell where scannart='13' and tour=t1.tour )*100,2) as 'QP-Anteil'
, (select count(paketnummer) from ber_aktuell where scannart='5' and tour=t1.tour) as Gebracht
, (select count(paketnummer) from ber_aktuell where scannart='14' and tour=t1.tour) as 'nicht geliefert'
from ber_aktuell t1
where tour between '350' and '389'
group by tour, datum
In der Tabelle 'ber_aktuell' sind etwa 150.000 Datensätze mit 43 Spalten enthalten. Der Datumswert ist immer der gleiche. Also relativ überschaubar.
Hat jemand eine Idee, wie ich das besser machen könnte.
Danke.
Thomas