Michael Schröpl: Groessten Wert bestimmen

Beitrag lesen

Hi Sven,

select id from tabellenname order by id desc limit 0,1
ginge auch!
Das ist aber vermutlich ein ziemlicher Performancefresser. Schließlich muß die gesamte Tabelle nach ID sortiert werden (sortieren ist immer aufwendig), während man bei max(ID) einfach nur den größten Wert feststellen muß, indem man (sofern es keinen passenden Index gibt) einmal die gesamte Tabelle durchliest.

der fehlende Index wäre in beiden Fällen das Problem: Er beschleunigt das Finden des Maximums (durch Rechtstraversierung im Baum), und er sagt einem (hinreichend guten) Query Optimizer, daß der sich das "sort" sparen kann, weil er statt dessen auch die Schleife aus dem Indexbaum "antreiben" kann, statt einen full table scan zu machen.

Ohne Index sind beide Verfahren nur bestenfalls linear schnell (ein guter Query OPtimizer sollte dem "LIMIT" ansehen können, daß der nicht die komplette Sortierung braucht, sondern nur die <n> maximalen Werte).

Viele Grüße
      Michael

--
T'Pol: I apologize if I acted inappropriately.
V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.