Hiho!
Ich nutze für ein Hobby Projekt PHP5 und Mysql5, bis jetzt funktionierte auch alles gut. Seit dem ich aber immer mehr Daten in der Datenbank habe dauern die Abfragen immer länger. Leider brauchen einige jetzt mehr als 5 Sekunden. Ich habe mit den Request schon mit Explain angeschaut. Dort steht, ich würde alle Keys benutzen.
Anbei mal ein Screenshot der Explainausgabe. Was kann ich da machen? Ich bin noch Anfänger beim optimieren von MYSQL anfragen.
Wie wäre es dann mal mit der (den) Query(s) und den dazugehörenden Datenbanktabellenstrukturen?
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage. . . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Leider brauchen einige jetzt mehr als 5 Sekunden. Ich habe mit den Request schon mit Explain angeschaut. Dort steht, ich würde alle Keys benutzen.
Jo tust du nur rechne mal deine rows zusammen
1x10x1x1x1x2802x56716x56716x13
Dafür sind 5sek echt gut ;)
Ich rate mal Browserspiel Thema Fußball, vielleicht nen Tippspiel?
Entweder passt deine DB-Struktur nicht zur Applikation oder umgekehrt.
3x Subquery auf ein und die selbe Tabelle ohne Indexierung produziert
dir die erhöhte Zeit!
Wenn du schon Explain kennst les die Mysql Doku dazu
Zitat:
Using filesort
MySQL muss einen zusätzlichen Durchlauf vornehmen, um zu ermitteln, wie die Datensätze in sortierter Reihenfolge abgerufen werden können. Diese Sortierung erfolgt, indem alle Datensätze entsprechend dem Join-Typ überprüft und Sortierschlüssel sowie der Zeiger auf den Datensatz für alle Datensätze gespeichert werden, die der WHERE-Klausel entsprechen. Die Schlüssel werden dann sortiert und die Datensätze entsprechend in sortierter Reihenfolge abgerufen. Siehe auch Abschnitt 7.2.12, „ORDER BY-Optimierung“.
mfg
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Sorry für das ich erst jetzt Antworte. Die Datenbanktabellenstruktur möchte ich hier nur sehr ungern posten.
Es sind nur Fussball Statistiken, also kein Browser Game oder der gleichen. Diese Werte ich aus und möchte die dann auf einer Webseite anbieten.
Das Problem ist, ich möchte den aktuellen Spieltag ermitteln, daher die Subquerys. Die Datenbank ist soweit schon in der Normalform. Eventuell sind da noch ein paar Bugs drin, da bin ich ja grade dran.
Hier mal das Query da wo i_id_liga steht kommt meine liga ID rein. Was braucht ihr noch um mir bei der Query zu helfen und diese zu optimieren?
Code:
SELECT
distinct(stat.id_spiel) as id_spiel,
h.name_de as heim_m_de,
g.name_de as gast_m_de,
h.name_eng as heim_m_eng,
g.name_eng as gast_m_eng,
s.tor_h,
s.tor_g,
s.et_tor_h,
s.et_tor_g,
s.pt_tor_h,
s.pt_tor_g,
s.ht_tor_h,
s.ht_tor_g,
s.spieltag,
date_format(s.datum,'%d.%m.%y') as datum,
date_format(s.anstoss,'%H:%i') as anstoss,
datum as datum_spieltag,
s.saison,
s.status,
s.id_liga,
if((select count(*) from spiel_aufstellung where id_spiel=s.id_spiel)>0,s.id_spiel,null) as id_aufstellung
FROM spiel s
JOIN (mannschaft h, mannschaft g, liga_link ll) on (s.id_heim=h.id_mannschaft AND s.id_gast=g.id_mannschaft AND s.id_liga=ll.id_liga)
LEFT JOIN statistik stat ON (stat.id_spiel=s.id_spiel)
where s.saison=ll.saison AND
spieltag like if(
(select spieltag from spiel where datum>=date_format(now(),'%Y-%m-%d') and id_liga=i_id_liga order by datum limit 1)>0,
(select spieltag from spiel where datum>=date_format(now(),'%Y-%m-%d') and id_liga=i_id_liga order by datum limit 1),
(select spieltag from spiel where id_liga=i_id_liga order by spieltag DESC limit 1)
)
and s.id_liga=i_id_liga order by datum_spieltag, anstoss;
[..] Die Datenbanktabellenstruktur möchte ich hier nur sehr ungern posten.
Wie sollen wir Dir helfen, wenn wir zu wenig wissen. Sorry, kaum INPUT - kein OUTPUT.
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage. . . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Die Datenbanktabellenstruktur möchte ich hier nur sehr ungern posten
Und anhand deines Query's können wir die nicht erraten?
Zitat:
Die Datenbank ist soweit schon in der Normalform.
Sorry aber sagt wer?
Zitat:
Was braucht ihr noch um mir bei der Query zu helfen und diese zu optimieren?
Leider alles ausser den zweck deiner Anwendung und die echten Daten und
glaub mir NUR die Daten sind dein Kapital nicht die Struktur denn die kann jeder
10te nachbauen/verbessern.
Also mit Geheimhaltung über die Tabellenstruktur, Definition der Felder und
erwünschten Abfrageergebnissen kommen wir hier wirklich nicht weiter.
Ich drück dir die Daumen das deine Performanceschwierigkeiten nicht dein
Projektende bedeuten.
mfg
CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!