moin,
Indices sind drauf.
fragt sich nur welche, das wäre hilfreich zu wissen. auch würde ich die abfrage anders gestallten. meine devise ist immer, JOINS sind "böse". das sind sie nicht wirklich, aber ich vermeide sie, wenn ich es kann, damit die anzahl der datensätze noch stimmt, die ich zurück haben will. deine basis wäre also im diesem falle die tabelle a.
SELECT a.id, a.name
FROM a
;
nun mit der korrelierten unterabfrage noch das datum einbringen. dafür wäre ein index in der b tabelle auf der spalte id sehr, sehr hilfreich.
SELECT a.id, a.name,
(SELECT MAX(Datum) FROM tabelle b WHERE b.id = a.id) datum
FROM a
;
und nun noch die zeitdifferenz einbringen.
SELECT t.id, t.name, t.datum, DATEDIFF(CURRENT_DATE(), t.datum)
FROM (SELECT a.id, a.name,
(SELECT MAX(Datum) FROM tabelle b WHERE b.id = a.id) datum
FROM a
) t
;
das sollte entsprechend schnell sein. vorraussetzung ist, dass id in der tabelle a primary key oder zumindest eindeutig ist.
Ilja