View Full Version : fetch first (vor Where)???
Hallo,
ich bin noch ein Anfänger und habe folgende Frage:
Ich habe eine Tabelle die täglich enorm wächst, bis jetzt habe ich diese ganz
nomal abgefragt mit:
Select...
Where...
Order By....
diese Abfrage dauert aber mitlerweile ca. 10-15min, deswegen jetzt die Idee, nur mit den letzen 500 Datensätzen zu
arbeiten (die auch nur für mich interresant sind).
Wie kann man das am besten und vorallem Performen-schonensten lösen??
Danke
svt
S.Neinawaie
26-09-11, 08:25
Hallo!
Du könntest die Sortierung ändern (so dass die letzten Datensätze am Anfang stehen) und anschließend mit
"fetch first 500 rows only" arbeiten.
Select * from ....
Where ...
Order by ...
fetch first 500 rows only
Allerdings würde mich mal interessieren wieviele Milliarden Datensätze denn in dieser Tabelle liegen wenn eine Abfrage 10-15 Minuten dauert.
LG,
Sam
Hallo Sam,
habe ich auch schon probiert, bekomme
aber die Fehlermeldung:
"SQL-Status: 42601
Vendorencode: -199
Nachricht: [SQL0199] Schlüsselwort WHERE nicht erwartet. Gültige Token: <ENDE DER ANWEISUNG>. Ursache . . . . : Schlüsselwort WHERE wurde an dieser Stelle nicht erwartet."
Gruß
svt
S.Neinawaie
26-09-11, 08:49
Hallo!
Könntest du eventuell das SQL Statement hier posten?
LG,
Sam
Hallo Sam,
(sorry bin noch neu!!)
habe ich auch schon probiert, bekomme
aber die Fehlermeldung:
"SQL-Status: 42601
Vendorencode: -199
Nachricht: [SQL0199] Schlüsselwort WHERE nicht erwartet. Gültige Token: <ENDE DER ANWEISUNG>. Ursache . . . . : Schlüsselwort WHERE wurde an dieser Stelle nicht erwartet."
Gruß
svt
Könntest du bitte einmal deine SQL abfrage posten.
Sonst können wird leider nichts mit der Fehlermeldung anfangen.
LG
Tobi
Fetch 500 Rows only wird wahrscheinlich auch nicht helfen, sofern ein Zugriffspfad, der anders als die Order By-Anweisung geschlüsselt ist verwendet wird.
Das oberste Ziel des Optimizers ist so schnell wie möglich an die gewünschten Daten zu kommen und da werden die Where-Bedingungen vorrangig geprüft und erst anschließend die Order By-Anweisungen. Die Daten werden also sehr oft in temporären Objekten gespeichert und erst anschließend sortiert.
Wird also zusätzlich ein Fetch For 500 Rows angegeben, läuft zunächst die komplette Abfrage durch und aus dem kompletten Ergebnis werden dann die ersten 500 Sätze ausgegeben.
Die kannst die Abfrage nur dadurch beschleunigen, dass Du die Abfrage analysierst (z.B. mit STRDBG oder Visual Explain) und die optimalen Zugriffswege anlegst.
Birgitta
Hallo Tobi,
anbei das SQL:
SELECT TPANR1, TPNBHF, TPBENR, TPIDEN, TPKMEN, TPVORT, TPVREG, TPVHOR, TPVVER, TPBMEN
FROM brkdatv6.phisttp
fetch first 500 rows only
WHERE tpkonz='LCV' And TPVART='PAZ' And TPNBHF='PACKSTUBE'
ORDER BY TPANR1 DESC , TPBENR, TPZUNR, TPTIA, TPPALN, TPANRP
Gruß
svt
S.Neinawaie
26-09-11, 09:47
Hallo Tobi,
anbei das SQL:
SELECT TPANR1, TPNBHF, TPBENR, TPIDEN, TPKMEN, TPVORT, TPVREG, TPVHOR, TPVVER, TPBMEN
FROM brkdatv6.phisttp
WHERE tpkonz='LCV' And TPVART='PAZ' And TPNBHF='PACKSTUBE'
ORDER BY TPANR1 DESC , TPBENR, TPZUNR, TPTIA, TPPALN, TPANRP
fetch first 500 rows only
Gruß
svt
Damit sollte es funktionieren.
Allerdings wird das laut Fr. Hauser auch nicht den gewünschten Erfolg bringen. Ich würd mich an Ihre Hinweise halten. (Hab ich auch wieder neues gelernt - Danke Birgitta)
LG,
Sam
Hallo Birgitta,
kannst du mir beim Umbauen des SQl helfen, da relativ Neuland für mich!!!
Danke svt