Das beobachtete Verhalten erklärt sich wie folgt:
Firebird kennt sowohl ascending als auch descending indices.
PKs werden automatisch ascending angelegt.
Um die Max()-Funktion auszuführen, guckt der Optimizer nach, ob es zu dem entsprechenden Feld einen DESCENDING Index gibt. Ist ein solcher nicht vorhanden, so wird gar kein Index genutzt.
Leg Dir also zusätzlich einen descending index auf das Feld, das Du mit der MAX()-Funktion bearbeiten willst und Dein Problem ist gelöst.
Dies ist auch der einzige Weg, die volle Geschwindigkeit zu erhalten.
Verwendet man die Variante mit dem first 1 und der descending order ohne den descending index anzulegen, so ist der
db-Server immernoch gezwungen, den vollen Index zu durchlaufen.
Gruß
Thomas