Hallo,

vorab zwei allgemeinere Hinweise zur SQL Performance:
- first do it right, then make it fast
klare Logik ist meist ausreichend schnell und lässt sich besser optimieren

- messen geht über vermuten und glauben zu wissen
mach dich mit dem Database Monitor vertraut, nur der sagt dir was die Datenbank wirklich macht (auch Visual Explain rät nur rum, was die Datenbank machen könnte!)

- zu deiner Frage im engeren:
die Lösung mit statischem SQL sollte mit entsprechenden Zugriffspfaden (die sich leichter prüfen lassen) in der Summe minimal schneller sein; zusätzliche Bedingungen können Queries sogar beschleunigen, da mehr Zugriffsmöglichkeiten bestehen (wenn das lauter betweens sind, die dann Highval/Lowval beinhalten freilich nicht), aber auch mit dynamischem SQL sollte das bei ausreichender Hardware und sorgfältiger Programmierung (Parameter Marker und Wiederverwendung des Prepare) und entsprechender Zentralisierung in Zugriffsmodulen keinerlei Problem verursachen.

- Bei reinem lesen von Daten hilft oft Blockung dramatisch (ob du einen oder 1000 Sätze in einem fetch holst ist fast gleich schnell

- bei read/update Logik ist der positioned update über Cursor wesentlich schneller als searched update mit Key (überkompensiert blocken)

- zur Durchsatzmaximierung bei Massenupdates hilft am Besten Parallelisierung

- keine Angst vor Journalisierung, die macht es eher schneller als langsamer (zumindest die Fehlersuche dramatisch!!!)

- keine Angst vor Commit, das ist keine Bremse, sondern für updates mit SQL unumgänglich, alles andere frei nach Ernst Bloch "Das Prinzip Hoffnung"

- Die Spielereien mit Close oder nicht Close habe ich noch nie mit DBMON verifiziert gesehen, das ist für mich die Erdnuss Abteilung. Ich würde im Gegensatz dazu raten beim Verlassen im Programm explizit zu closen und im Entry zu öffnen, das kommt der Applikationslogik entscheidend zu Gute (man hat immer einen kontrollierten Status eines Cursors, was ja immens wichtig ist!!!).

mfg

Dieter Bender


Zitat Zitat von Jamikl
Hallo,

ich hab schon die Such-Funktion genutzt, aber zu meinem konkreten Problem habe ich keine Antworten gefunden.

Ich habe die Aufgabe die Performance in einigen Programmen zu verbessern. Der Knackpunkt ist der SQL den es zu verbessern gilt.
Ich habe ein Feld das nicht unbedingt gefüllt ist.
Momentan wir dieses Feld mit Feld = " " or Feld between [vonwert] and [biswert]. Der Von und Bis Wert wird zuvor gesetzt.

Da ich jetzt in einigen Threads verfolgt habe, dass statische Sqls schneller sind, habe ich jetzt die Frage: Was ist in diesem Fall??
Soll ich eher die unsinnige Abfrage (falls das Feld nicht gefüllt ist) statisch drin lassen oder alles auf dynamisch umstellen?

Bin schon auf euere Erfahrungswerte gespannt.