Halihallo XMen
So, ich habe mich über meine Dummheiten in diesem Thread so aufgeregt, dass ich erstmal
etwas Beach-Volleyball spielen musste :-)
Irgendwann hat's mich doch ziemlich stark auf meine "Birne" geknallt und da hatte ich
dann folgende Idee: ;)
SELECT a.text, a.group_id, MAX(b.id) AS max_id
FROM
tb1 AS a,
tb2 AS b
WHERE
a.group_id=b.group_id AND
a.num=1
GROUP BY
a.id,b.group_id
HAVING
a.id=max_id
So, dies sollte jetzt wieder viel performanter sein. Ich hatte mir vorher wenig dabei
gedacht und das Grundprinzip "Möglichst schnell die Datenmenge verkleinern" völlig
ausser acht gelassen. Durch die WHERE-Condition dass a.group_id=b.group_id reduziert
sich die Datenmenge um ein vielfaches und die Performance steigt, zudem kommt der Index
wesentlich besser zum tragen. Dies ist zwar immer noch nicht sehr performant, aber
sicher besser als 15 Sekunden.
Soviel zu dem, falls dies dann immer noch nicht performant sein sollte, was ich aber
nicht glaube, folgendes:
SELECT MAX(id)
FROM
tb1
WHERE
num=1
GROUP BY group_id
mit den MAX(id)'s machst du folgendes:
SELECT text
FROM
tb1
WHERE
id IN ([Komma-Liste-von-MAX(id)'s])
ORDER BY
id DESC
sollte ziemlich performant sein.
dein Vorschlag: "SELECT text, MAX(id) AS max_id FROM table WHERE num='1' GROUP BY
group_id ORDER BY max_id DESC"
Nun ja, ORDER BY max_id ist unglücklich, den würde ich im zweiten Query schreiben, da
dann der Unique Index des Primary Keys (id) verwendet werden kann => wesentlich
schneller. Bei deinem Query müsste zuerst gruppiert werden und auf der temporären
Zwischenergebnistabelle sortiert werden (dauert länger). Zudem hat hier "text" wirklich
_nichts_ zu suchen! - Wie gesagt, das ist ein "Bug" in MySQL. text darf nur ohne
Agregatsfunktionen (SUM/AVG/MAX/MIN/COUNT) vorkommen, wenn du nach dem Primary Key 'id'
auf dieselbe Tabelle gruppierst. Du hast richtig festgestellt, dass MySQL hier einen
zufälligen Text auswählt.
Und wenn ich jetzt nochmals einen Denkfehler habe, geh ich schlafen, Himmel noch eins!
;-)
Viele Grüsse
Philipp
RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.