dbOpenForwardOnly vs. dbSnapshot

10/02/2014 - 10:00 von Wolfgang Wolf | Report spam
Hallo,

habe in meinen DAO-SELECTS bisher immer dbOpenForwardOnly verwendet und
ungeprüft daran geglaubt, dass das der schnellste Weg ist, um Daten von
einer Datenbank abzurufen. Ab einer gewissen SQL-Komplexitàt (Ingres)
funktioniert allerdings dbOpenForwardOnly nicht mehr (ab 4-5 JOINS), es
kommt zu Fehlern beim Abrufen der Daten, also nicht beim Öffnen des
Recordsets, sondern irgendwo in der MoveNext-Schleife.

Der Ingres-ODBC-Treiber verwendet eine Einstellung "Select Loops versus
Cursors". Den Fehler habe ich nur bei "Select Loops", allerdings ist das
die permanentere Abrufmethode. "Cursors" ist auf manchen Rechnern bis zu
Faktor 3-5 langsamer (auf anderen Rechnern nur minimal, warum das so ist
weiß ich auch nicht).

Den Fehler habe ich nicht, wenn ich dbOpenForwardOnly statt dbSnapshot
verwende. Kann jetzt auch keine großartigen Leistungsunterschiede
feststellen.

Meine Farage wàre: weiß jemand wie so ein ODBC-Treiber intern tickt? Was
könnten die (theoretischen) Nachteile von Snapshots gegenüber
ForwardShnapshots sein? Wàre es vertretbar in der ganzen Anwendung auf
dbOpenForwardOnly zu verzichten? Mir ist klar, dass jeder DB-Hersteller
diese Internat anders implementiert, aber irgendeinen gemeinsamen Nenner
muss es doch wohl geben.

Schönen Gruß
W. Wolf
 

Lesen sie die antworten

#1 Anton Bayer
10/02/2014 - 12:04 | Warnen spam
Recordsets vom Typ Snapshot und Vorwàrts sind fast identisch. Bei Vorwàrts
kann man sich eben nur vorwàrts bewegen und es muß deshalb weniger gepuffert
werden, d.h. theoretisch wird's daher etwas schneller.

Da normalerweise die Pufferung lokal erfolgt ist das Zeitverhalten auch
stark maschinenabhàngig.

Ähnliche fragen