Hey Kit,

Was ich als zweckpunkt gewollt habe, ist die möglichkeit besteht um es
ohne max(...)
mit nutzung von
order by... /desc
fetch first/last
auch schaffen kann.
Dazu wollte ich auch fragen, welche läuft schneller? Mit max(...) oder fetch first?
Werden die Abfragen mit den SQE ausgeführt und wird jeweils nur der Maximal-Wert selektiert, wird der gleiche Zugriffsplan verwendet, d.h. Zeitabweichungen hängen lediglich von der Auslastung auf der Maschine ab.

Die folgenden Abfragen werden original gleich ausgeführt. Es existiert ein Zugriffsweg nach FldX.

PHP-Code:
Select Max(Fldx)
From MyTable
PHP-Code:
Select FldX
from MyTable
Order By FldX Desc
Fetch First Row Only


Das setzt aber auch einen DESC-Key voraus, denn ich weiß nicht, ob der Optimizer ggf. auch rückwärts optimiert.
Die CQE braucht eine absteigend sortierten Zugriffspfad (in beiden Fällen!). SQE kann eine Zugriffsweg auch rückwärts verarbeiten.

Wird die Abfrage mit der CQE ohne entsprechenden Zugriffsweg verarbeitet, ist die Variante mit der Aggregat-Funktion (MAX) wesentlich schneller als die Variante mit dem Fetch! In der Fetch Variante wird eine temporäre Datei gebildet während bei der anderen Variante gruppiert werden kann.

Bei entsprechend sortiertem Zugriffsweg wird dieser bei der Fetch-Variante verwendet, während im anderen Fall weiterhin ein Table Scan mit Grouping verwendet wird.

Bei zusammengesetzten Feldern erübrigt sich ja eigentlich die Frage
Vor 6.1 ja, ab 6.1 können auch Indices über zusammengesetzte Felder oder durch skalare Funktionen veränderte Felder gebildet werden. Diese Indices können dann auch vom Optimizer verwendet werden.

Birgitta