Hallo,
nachdem mir hier in letzter Zeit mehrere ganz hervorragende Tipps gegeben worden sind , möchte ich euch noch mal mit 2 Fragen behelligen, von denen ich hoffe, dass mir jemand dabei helfen kann.
Teilfrage 1
Angenommen ich habe zwei Tabellen wie die folgenden:
Nun möchte ich die Anzahl der Sachen abfragen, die das Datum 02.05.2009 tragen und die einer Kategorie zugeordnet sind, die als "essbar" eingestuft ist. Dazu verwende ich die folgende Abfrage, die auch wunschgemäß funktioniert:
Allerdings habe ich den Eindruck, dass die Abfrage in Anbetracht einer recht geringen Datenmenge in den Tabellen ziemlich lange dauert. Gäbe es da vielleicht Möglichkeiten zur Optimierung? s.datum ist übrigens vom Typ DATETIME und speichert neben dem Datum auch noch eine Uhrzeit, die für diese Abfrage aber nicht von Bedeutung ist. Es geht hier nur um den Tag, daher die umständliche Schreibweise mit DAY(...) usw. k.essbar ist vom Typ TINYINT und entweder 0 oder 1.
Teilfrage 2
Neben dieser Abfrage habe ich noch eine zweite, bei der der Optimierungsbedarf noch größer zu sein scheint. Die Ausführung der Abfrage dauert rund 30 Sekunden, obwohl der PC gar nicht mal langsam ist und das würde ich gerne noch schneller hinbekommen.
Die Tabellen sind wieder die gleichen wie oben, nur dass hier noch eine dritte dazukommt:
In diesem Fall möchte ich gerne abfragen, wie viele Sachen am 02.05.2009 gegessen worden sind, die nicht essbar waren... ^^
Dazu verwende ich bisher die folgende Abfrage:
Ich glaube das Problem ist, dass für jeden Datensatz der Tabelle verputzt die Unterabfrage nach dem IN ausgeführt wird oder? Das wäre ja eigentlich nur 1x nötig. :-?
Gruß und danke schon im Voraus!
MicroMumpitz
nachdem mir hier in letzter Zeit mehrere ganz hervorragende Tipps gegeben worden sind , möchte ich euch noch mal mit 2 Fragen behelligen, von denen ich hoffe, dass mir jemand dabei helfen kann.
Teilfrage 1
Angenommen ich habe zwei Tabellen wie die folgenden:
Nun möchte ich die Anzahl der Sachen abfragen, die das Datum 02.05.2009 tragen und die einer Kategorie zugeordnet sind, die als "essbar" eingestuft ist. Dazu verwende ich die folgende Abfrage, die auch wunschgemäß funktioniert:
Code:
SELECT COUNT(s.katid) FROM sachen s JOIN (SELECT katid, essbar FROM kategs) AS k ON k.katid=s.katid WHERE DAY(s.datum)= '2' AND MONTH(s.datum)='5' AND YEAR(s.datum)='2009' AND k.essbar='1'
Teilfrage 2
Neben dieser Abfrage habe ich noch eine zweite, bei der der Optimierungsbedarf noch größer zu sein scheint. Die Ausführung der Abfrage dauert rund 30 Sekunden, obwohl der PC gar nicht mal langsam ist und das würde ich gerne noch schneller hinbekommen.
Die Tabellen sind wieder die gleichen wie oben, nur dass hier noch eine dritte dazukommt:
In diesem Fall möchte ich gerne abfragen, wie viele Sachen am 02.05.2009 gegessen worden sind, die nicht essbar waren... ^^
Dazu verwende ich bisher die folgende Abfrage:
Code:
SELECT COUNT(*) FROM verputzt v WHERE DAY(v.datum)= '2' AND MONTH(v.datum)='5' AND YEAR(v.datum)='2009' AND v.sachid IN (SELECT s.sachid FROM sachen s JOIN (SELECT katid, essbar FROM kategs) AS k ON k.katid=s.katid WHERE k.essbar='0' )
Gruß und danke schon im Voraus!
MicroMumpitz
Kommentar