[Gelöst]SQL Anweisung langsam

13. Dezember 2011 15:30

Hallo,
mein Problem hat nur indirekt was mit Navision zu tun. Vieleicht weis aber trotzdem jemand Rat.

Ich habe in Navision eine Tabelle angelegt.
Diese enthält sehr viele Posten. (Alle 5 min. komme 10 neue hinzu )

Bei dieser Tabelle benötige ich ausserhalb von Navision immer den letzten Datensatz.
Diese Abfrage dauert sehr lange. Als die Tabelle noch kleiner war, war dies kein Problem.

Hier ein Auszug aus dem Profiler
delay.JPG


primär index ist vwdcode,date
weitere Index Date
Sinn undzweck der Abfrage ist es, herrauszufinden wie alt der letzte Datensatz ist.

Muss ich evtl. noch Extra indexe in der Datenbank setzten ?. Oder kennt jemand einen anderen "Trick" um an den letzten datensatz zu kommen ?

Sollte das sogarnicht hier hingehören entschuldige ich mich schon mal. Liebe Mods... dann bitte löschen...


gruss
Jörg
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Jörg Nissen am 13. Dezember 2011 16:21, insgesamt 1-mal geändert.

Re: SQL Anweisung langsam

13. Dezember 2011 15:35

Hallo,

Ich denke mal ein Top(1) mit umgedrehten Sortierreihenfolge müsste das gewünschte Ergebnis sein?

Re: SQL Anweisung langsam

13. Dezember 2011 16:03

Hallo,

dann ist es noch langsamer.....

Re: [Gelöst]SQL Anweisung langsam

13. Dezember 2011 16:25

Problem lag ganz woanders.....

Der Job der die Daten in Navision in die Tabelle einfügt, läuft ca. 2 min.
Da Navision eine Tablelocking macht war die Tabelle komplett gesperrt.
Commit eingefügt und scon geht :-)

Re: [Gelöst]SQL Anweisung langsam

13. Dezember 2011 18:14

hallo,

hier vielleicht noch ein tipp für die zukunft.

da es sich um eine postentabelle handelt, wirst du ja eine laufende nummer als PK haben.
aus der laufenfenden nummer 0 (die ist ja unbenutzt) kannst du dann einen sonderfall machen, das heißt bei jedem insert speicherst du dir die werte des letzten datensatzes in der lfd. 0 weg.
um nun den findlast + 1 oder ähnliches zumachen reich rein get(0) oder findfirst.

grüße