Frank aus Ulm: Performance von Datenbankabfrage

Beitrag lesen

Moin :-)

  1. Welchen Effekt hat z.B., wenn ich im SQL Statement statt SELECT * FROM ... die Wildcard durch die Namen der abzufragenden Datenbankfelder ersetze? Ist das zu empfehlen?

* ruft ja alle Felder auf, wenn du nicht alle Felder brauchst, dann trag dort nur die gewünschten ein -> Performancegewinn, weil ja nicht soviele Felder im Recordset gespeichert werden müssen

  1. Welcher Verbindugnstyp sollte gewaehlt werden? (DNS, DNS-less, ADODB etc.)

ADODB ist kein Verbindungstyp sondern die Komponente zum Zugreifen ... ActiveX Data Objects.

DSN / DSN-less ist auch nicht so treffend ... wobei ich immer DSN-less vorziehen würde

du mußt dich zwischen OLEDB Engine (soweit verfügbar - bei Access natürlich) und ODBC layer (der aber evt. auch wieder die JET OleDB Engine benutzt) entscheiden. OleDB ist besser, da man diesen ODBC layer nicht dazwischenschalten muß

  1. Wirkt sich ein setzen von Parametern (z.B. Cursorlocation=adopenstatic, Locktype=adlockreadonly etc.) positiv aufs Performance aus?

ja, ziemlich ...

wenn du nur lesen willst, recordset abrasseln und in HTML darstellen dann

adOpenForwardOnly
adLockReadOnly

wenn du Daten einfach modifizen willst, nimm connection.execute mit dem Update/Insert SQL und stelle einen Parameter auf "keine Recordsetrückgabe" (keine Ahnung wie der grad heißt)

wenn du multiple Datensatzänderungen machen willst, mehrere geöffnete Recordsets gleichzeitig, dann mußt du entscheiden, ob adOpenStatic (erzeugt einen statischen Snapshot von der DB mit deiner SQL Abfrage) oder adOpenDynamic/adOpenKeyset (erzeugen immer noch von DB seite veränderliche Recordsets (falls jemand anders grad updatet)) nehmen willst. adOpenDynamic und -keyset sind performanceintensiver

  1. Welcher Abfragetyp sollte gewaehlt werden? (recordset, getrows oder stored procedures)

Wie ich ja neulich gelernt habe *grins* empfiehlt es sich, dass recordset so schnell als möglich wieder zuzumachen.

Aber die möglichkeit storedProcedures passt da nicht unbedingt hin, denn wenn du eine ausführst bekommst du fast zwangsweise auch wieder ein Recordset welches du wieder mit getRows zum Array machen könntest.

StoredProcedures haben ihren Vorteil darin, daß sie auf dem Datenbankserver vorkompiliert sind und wesentlich schneller ausgeführt werden können. Desto komplexer die Abfrage/Prozedur destomehr Performance Gain.

  1. (von mir hinzugefügt)

du solltest dir auch mal gedanken machen, in access parameterisierte Abfragen zu erstellen und diese zu verwenden, das ist sicherer gegen SQL injection und vielleicht auch etwas performanter. Access Abfragen kann man aber noch lange nicht mit StoredProcedures eines SQL Servers vergleichen.

Waere nett, wenn Ihr mir Tipps geben koenntet...

bitte, gern geschehen

Tschau, tschüß,
Frank