Hallo,
Ich habe schon länger das Problem, dass eine meiner Abfragen etwa eine viertel Sekunde dauert (250ms). Bisher habe ich das einfach hingenommen, weil ich dachte das wäre normal, wenn man über 4 Tabellen joint. Aber heute wollte ich mich dann einfach mal dransetzen und das Problem beheben. Ich habe eine Tabelle mit mehreren zehntausend Einträgen, welche jeweils IDs enthält, um Daten aus drei anderen Tabellen(jeweils nur ein paar hundert Einträge) zu hohlen.
Um jetzt mal zum Punkt zu kommen. Ich habe die Joins entfernt und nur noch die Daten aus der großen Tabelle geholt. Ich war erstaunt, als die Abfrage immer noch 250ms gedauert hat. Nach ein bisschen try-and-error konnte ich das Problem eingrenzen, kann es mir aber nicht erklären. Wenn eine der Spalten im SELECT vorkommt, dauert es 250ms, wenn ich die Spalte rausnehme nur noch 30ms.
Hier nochmal veranschaulicht
Die Spalte(a) ist ein INT(10) UNSIGNED.
Wenn ich im ersten statement wahlweise das WHERE oder das ORDER BY entferne, bin ich wieder bei bei 30ms.
Auf a liegt kein Index
b hingegen ist Teil eines Index über mehrere Spalten(mit unter anderem c und d).
EXPLAIN SELECT sagt mir, dass es so langsam ist, weil kein INDEX benutzt wird. Aber wieso nutzt MySQL den INDEX nicht, wenn im SELECT irgendeine Spalte vorkommt, die nicht Teil des INDEX ist? Ein SELECT * dauer übrigens 670ms (Für die Ausführung! Der Netwerk-Transfer wurde abgezogen)
Entweder handelt es sich hierbei um einen Bug, oder ich bin auf etwas gestoßen, dass für mich einfach neu ist. Ich bin eben kein Datenbankspezialist.
Schonmal Danke im Vorraus.
Ich habe schon länger das Problem, dass eine meiner Abfragen etwa eine viertel Sekunde dauert (250ms). Bisher habe ich das einfach hingenommen, weil ich dachte das wäre normal, wenn man über 4 Tabellen joint. Aber heute wollte ich mich dann einfach mal dransetzen und das Problem beheben. Ich habe eine Tabelle mit mehreren zehntausend Einträgen, welche jeweils IDs enthält, um Daten aus drei anderen Tabellen(jeweils nur ein paar hundert Einträge) zu hohlen.
Um jetzt mal zum Punkt zu kommen. Ich habe die Joins entfernt und nur noch die Daten aus der großen Tabelle geholt. Ich war erstaunt, als die Abfrage immer noch 250ms gedauert hat. Nach ein bisschen try-and-error konnte ich das Problem eingrenzen, kann es mir aber nicht erklären. Wenn eine der Spalten im SELECT vorkommt, dauert es 250ms, wenn ich die Spalte rausnehme nur noch 30ms.
Hier nochmal veranschaulicht
SQL:
SELECT a FROM tabelle WHERE c=4 ORDER BY d #250ms
SELECT b FROM tabelle WHERE c=4 ORDER BY d #30ms
Die Spalte(a) ist ein INT(10) UNSIGNED.
Wenn ich im ersten statement wahlweise das WHERE oder das ORDER BY entferne, bin ich wieder bei bei 30ms.
Auf a liegt kein Index
b hingegen ist Teil eines Index über mehrere Spalten(mit unter anderem c und d).
EXPLAIN SELECT sagt mir, dass es so langsam ist, weil kein INDEX benutzt wird. Aber wieso nutzt MySQL den INDEX nicht, wenn im SELECT irgendeine Spalte vorkommt, die nicht Teil des INDEX ist? Ein SELECT * dauer übrigens 670ms (Für die Ausführung! Der Netwerk-Transfer wurde abgezogen)
Entweder handelt es sich hierbei um einen Bug, oder ich bin auf etwas gestoßen, dass für mich einfach neu ist. Ich bin eben kein Datenbankspezialist.
Schonmal Danke im Vorraus.