Rash thoughts about .NET, C#, F# and Dynamics NAV.


"Every solution will only lead to new problems."

Sunday, 3. June 2007


Navision Performance-Optimierung auf dem SQL-Server

Filed under: msu solutions GmbH,Navision,SQL Server — Steffen Forkmann at 11:28 Uhr

Seit Microsoft das SP1 für Dynamics Nav 4 heraus gebracht hat, gibt es neue C/AL-Befehle zur schnelleren SQL-Server-Abfrage. Da immer wieder Fragen dazu auftauchen, hier eine kleine Zusammenfassung.

ISEMPTY

Diesen Befehl existiert zwar schon länger, wird immer noch nicht durchgängig verwendet. Man benutzt ISEMPTY um heraus zu finden, ob die gefilterte Menge einen Datensatz enthält. Die Funktion liefert dabei nur TRUE oder FALSE zurück. Das heißt selbst wenn ein Datensatz gefunden wurde, wird dieser nicht in den entsprechenden Record kopiert.

FINDFIRST

FINDFIRST wird verwendet, wenn man explizit nur mit dem ersten Datensatz der gefilterten Menge arbeiten möchte. Durch die Angabe dieser Information braucht der SQL-Server nur einen ServerTrip und kann so einige Roundtrips sparen.

FINDLAST

FINDLAST verhält sich analog zu zu FINDFIRST – mit dem Unterschied, dass hier der letzte Datensatz der gefilterten Menge zurück gegeben wird.

FINDSET([ForUpdate][, UpdateKey])

FINDSET wird immer dann benutzt, wenn man mit der gesamten gefilterten Menge in aufsteigender Ordnung arbeiten möchte.

Die Standardwerte für die Parameter ForUpdate und UpdateKey sind FALSE. Wenn man also keine Daten ändern möchte, dann benutzt man FINDSET auf folgende Weise:

Hierzu wird kein Datenbank-Cursor benötigt.
Möchte man Daten ändern, so sollte man ForUpdate auf TRUE setzen. Dann wird zwar ein dynamischer Cursor verwendet, aber eben nur dann.

Hierzu wird ein “dynamic cursor” angelegt. Und die Tabelle sofort gesperrt.
Möchte man sogar Schlüsselfelder ändern, sollte FINDSET(TRUE,TRUE) benutzt werden.

Schlußfolgerung

Man sollte sich auf jeden Fall etwas Zeit nehmen und alle Find(Which)-Anweisungen der eigenen Software gegen die 4 “neuen” Befehle austauschen. Das wird die Performance der Anwendung in vielen Fällen drastisch erhöhen – zumindest an den Stellen, wo der dynamische Cursor weggelassen werden kann.

Weitere Informationen:

Tags: , , , , , ,

No Comments »

No comments yet.

RSS feed for comments on this post. | TrackBack URI

Leave a comment

XHTML ( You can use these tags): <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> .