MySql 5 - Abfrage dauert ewig. Wie kann ich es beschleunigen?
Helmuth
- datenbank
0 Pete0 Rouven
0 Vinzenz Mai
Hallo, ich brauche drigend Eure Hilfe. Ich habe eine Tabelle, die in etwa so aufgebaut ist und ca. 50.000 Einträge enthält.
1 | 1 | 1 | 50
2 | 1 | 2 | 20
3 | 1 | 3 | 10
4 | 2 | 5 | 30
5 | 2 | 1 | 60
6 | 2 | 7 | 20
7 | 3 | 9 | 30
8 | 3 | 8 | 90
9 | 3 | 1 | 80
...
50.000 ...
Ich will die "anzahl" der "id_gruppe" 1 mit der "anzahl" der "id_gruppe" 2 vergleichen.
SELECT
q2.anzahl - q1.anzahl AS anzahl_unterschied
FROM tabellle AS q1
LEFT JOIN tabellle AS q2 ON ( q1.id_gruppe = q2.id_gruppe )
WHERE
q1.id_durchgang = 1
AND q2.id_durchgang = 2
Das dauert dauert dann laut "EXPLAIN" im MySql etwa 50.000 x 50.000 Datensätze, also ewig.
Hat jemand ne Idee wie ich es beschleunigen kann? Vielleicht denke ich auch einfach falsch!?
Bin über jede Hilfe dankbar.
Helmuth
SELECT COUNT(*) FROM tabelle WHERE id_Gruppe = 1
UNION
SELECT COUNT(*) FROM tabelle WHERE id_Gruppe = 2
Sollte dir jeweils die Anzahl Datensätze ausgeben.
Hello,
SELECT COUNT(*) FROM tabelle WHERE id_Gruppe = 1
UNION
SELECT COUNT(*) FROM tabelle WHERE id_Gruppe = 2
um Ilja zuvorzukommen: hier würde sogar ich einen UNION ALL empfehlen, sonst hast du bei gleicher Zahl nur ein Ergebnis.
MfG
Rouven
--
\-------------------
sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& ([SelfCode](http://selfspezial.atomic-eggs.com/scode/selfcode.php?encodieren))
Inter Arma Enim Silent Leges -- Cicero
Hallo,
Hallo, ich brauche drigend Eure Hilfe. Ich habe eine Tabelle, die in etwa so aufgebaut ist und ca. 50.000 Einträge enthält.
id | id_durchgang | id_gruppe | anzahl
1 | 1 | 1 | 50
2 | 1 | 2 | 20
3 | 1 | 3 | 10
4 | 2 | 5 | 30
5 | 2 | 1 | 60
6 | 2 | 7 | 20
7 | 3 | 9 | 30
8 | 3 | 8 | 90
9 | 3 | 1 | 80
...
50.000 ...Ich will die "anzahl" der "id_gruppe" 1 mit der "anzahl" der "id_gruppe" 2 vergleichen.
Bist Du Dir ganz sicher, dass Du einen LEFT JOIN willst?
SELECT
q2.anzahl - q1.anzahl AS anzahl_unterschied
FROM tabellle AS q1
LEFT JOIN tabellle AS q2 ON ( q1.id_gruppe = q2.id_gruppe )
WHERE
q1.id_durchgang = 1
AND q2.id_durchgang = 2
Warum joinst Du nicht die durch Deine WHERE-Klausel eingeschränkten Ergebnismengen miteinander? Selbst wenne es nur 10 Durchgänge gab, wäre dies bereits eine Reduzierung um einen Faktor 100.
Welche Indexe sind vorhanden, welche können genutzt werden.
Wieviele Durchgänge gibt es, wieviele Gruppen? Ja, das spielt eine Rolle.
Das dauert dauert dann laut "EXPLAIN" im MySql etwa 50.000 x 50.000 Datensätze, also ewig.
Du kennst das Handbuchkapitel Optimization?
Freundliche Grüße
Vinzenz