17. März 2007 14:37
VON EINEM SOLCHEN VERFAHREN RATE ICH DRINGEND AB
Grundsätzlich gilt: SETCURRENTKEY bestimmt die ORDER BY clause des SQL Statements; fehlt SETCURRENTKEY, so wird im ORDER BY der Primäschlüssel gesetzt.
Ob ein SETCURRENTKEY sinnvoll ist oder nicht hängt von einigen Faktoren ab:
Wie sieht die Abfrage aus? Ist Sortierung/Gruppierung erfroderlich? Welche Filter sind gesetzt? Welche Indexe existieren? Wie sieht der Primärschlüssel aus? Wie ist der gruppierte Index aufgebaut?
Man kann sagen: Existiert ein optimaler Index der für die Bearbeitung einer Abfrage genutzt werden kann (Filter!!!), und spielt die Sortierung des Result-Sets keine Rolle, und entspricht der gruppierte Index dem Primärschlüssel, so ist es besser auf SETCURRENTKEY zu verzichten, als eine schlechten SETCURRENTKEY zu verwenden (also anders zu Filtern als zu Sortieren); andernfalls muss SQL Server "kostspielig" die Datensätze umsortieren.
Aber in den meisten Fällen spielt die Sortierung der Daten in NAV eben schon eine Rolle; eine fehlender SETCURRENTKEY würde dann die Prozess-Logik zerstören.
Ebenso ist es im Standard i.d.R. der Fall, daß zu jedem Key auch ein Index existiert; auch werden Filter meistens nur auf Felder dieses Keys/Index gesetzt; d.h. WHERE und ORDER BY clause passen ohnehin zusammen - damit ist der SETCURRENTKEY kein Problem.
Lediglich in Einzelfällen, wenn man Indexstrukturen z.B. von Hand optimiert, kann so eine Maßnahme zur Perfromance Steigerung beitragen; werden hier Fehler gemacht, dann "geht der Schuss nach hinten los".
Wer also hier nicht GENAU weiß, was er tut, sollte lieber die Finger davon lassen ...