Was wäre die effizienteste und eleganteste Art, den MAX-Wert aus einer transparenten Tabelle auszuwählen? Zum Beispiel versuchen wir, eine solche einfache Tabelle als T100, Nachrichten auszuwählen. Stellen wir uns vor, wir sollten innerhalb eines Anwendungsbereichs die maximale Nachrichtennummer auswählen. Wir können dies auf mehrere Arten tun.
Die naheliegendste ist MAX
AggregatfunktionEffizienz des Maximalwerts SELECT aus dbtab
select MAX(msgnr)
from t100
where arbgb = '/ASU/GENERAL'
mit und die andere ist mit UP TO 1 ROWS
Klausel
select msgnr
from t100
where arbgb = '/ASU/GENERAL'
and ROWNUM = 1
order by msgnr DESC
Hier oben, alle SQL-Anweisungen werden in einer nativen Oracle SQL gegeben, wie ich Tests tat in DBACOCKPIT, wo dies obligatorisch ist.
Einbau-Cockpit-Werkzeug für beiden Anfragen nahezu identische Ergebnisse zeigte:
- geschätzt Kosten 3 für beide von ihnen sind jedoch weist zweite Abfrage nur 2 Stufen in der Draufsicht während der ersten 3 hat.
- geschätzte CPU Kosten für die erste Abfrage ist 21,564 pro Schritt jedoch hat zweite insgesamt Kosten von 21,964.
So können wir daraus schließen, dass die zweite Variante hier effizienter ist.
Aber wäre das ein Punkt in einem allgemeinen Fall? Wäre dieses Ergebnis bei verschiedenen DB anders, oder können wir es als Faustregel behandeln?