Hallo,
ich hab hier eine Abfrage, die aus allen Wettbewerben weltweit die Top30 Torschützen der aktuellen Saison (2006/2007 und 2006) ermittelt.
Leider braucht dieser Query 12 Sekunden für die Ausführung. Hab dann ein wenig rum probiert und die Zeit gemessen. Dabei gabs dann einige merkwürdige Ergebnisse und ich kann mir nicht erklären wie diese zustande kommen.
Hier mal mein Query:
select distinct spielerbericht.spieler_id, count(spielerbericht.id) as spiele, sum(spielerbericht.spielzeit) as minuten, sum(spielerbericht.tore) as tore_gesamt
from spielerbericht
inner join spielplan on spielplan.id = spielerbericht.begegnung_id
inner join tabdef on tabdef.id = spielplan.tabdef_id
where
(
tabdef.liga_id = 1
)
and
(
tabdef.nation_id = 1 or tabdef.nation_id = 21 or tabdef.nation_id = 32 or tabdef.nation_id = 51
)
and
(
tabdef.saison = ‚2006/2007‘ or tabdef.saison = ‚2006‘
)
group by spielerbericht.spieler_id
order by tore_gesamt desc limit 30
Erläuterung:
- Tabelle Spielerbericht = Für jeden Einsatz eines Spielers gibts da einen Datensatz
- Tabelle Spielplan = Begegnungen, 1 zu n mit Spielerbericht
Tabelle Tabdef = Wettbewerbe, 1 zu n mit Spielplan
Ergebnis:
Dieser Query braucht also 12 Sekunden. Hab jetzt einige kleine Veränderungen vorgenommen mit folgenden Ergebnissen:
-
Anstatt nach 06/07 + 06 hab ich nur nach einer Saison selectiert. Daraufhin brauchte die Abfrage nur noch 0,3 Sekunden. Dabei ist es egal welche Saison ich da nehme. Sobald eine zweite dazu kommt bin cih wieder bei 12 Sekunden. Nehm ich allerdings noch eine dritte, vierte oder 5 Saison dazu braucht der Query trotzden nur 12 Sekunde. Es gibt nur den Zeitsprung von einer auf zwei.
-
Genau so verhält es sich bei der Länderauswahl (tabdef.nation_id). Bei einem Land dauerts wieder 0,3 Sekunden, sobald ein zweites, drittes oder viertes Land dazu kommt bin ich wieder bei 12 Sekunden.
-
Genau andes rum ist es bei der Ligaauswahl. Wenn ich ausgehend vom obigen Query eine oder mehrere weitere Ligen dazu nehme braucht der Query anstatt 12 Sekunden nur noch 0,3 Sekunden.
Hat jemand ne Idee wie diese Ergebnisse zustande kommen? Bin auch dankbar für einige Tips die den Query schneller machen.
Danke, Christian