while query do... ?

Dario Linsky

Erfahrenes Mitglied
tag zusammen.

ich denke mal, dass das hier am besten rein passt. auch wenn's nicht wirklich um mysql/php geht, sondern eher um die theoretische lösung des ganzen.
ein allgemeines datenbank-forum gibt's ja nicht... :rolleyes:

gehen wir mal von folgendem szenario aus:
ich hab in meiner datenbank eine grössere datenmenge, die ich gerne abfragen (und evtl. sortieren oder filtern) möchte. unter umständen kann eine solche abfrage ja schon etwas zeit in anspruch nehmen und der user muss warten.
dazu hab ich mal drei fragen:

1. wie komplex kann eine abfrage sein, ohne dass die wartezeiten anfangen zu nerven?
2. ab wievielen datensätzen wird das langsamer?
3. kann man irgendwie rauskriegen, wie lange die abfrage dauert (um z.b. den fortschritt anzuzeigen)? wenn ja - wie?!

es geht mir dabei hauptsächlich um die datenbanksysteme access, oracle, mssql, informix und mysql.
wär klasse, wenn das jemand wüsste. das quält mich schon länger... :rolleyes:
danke schonmal.

regards,
wicked
 
Also unter den genannten Beispielen (außer informix, das sagt mir nix) dürfte glaub ich Access am schlechtesten abschneiden. Das ganze hängt natürlich von den Inhalten der Tabellen ab, ob 1000 oder 1Mio Datensätze drin sind. Bei letzterem würde Access sowieso den "Löffel werfen". Des weiteren spielen das Datenbank-Design eine große Rolle. Ob die Datenbank einfach hoppla-hopp mal schnell erstellt worden ist und immer wieder erweitert wurde, oder ob man sich ernsthafte Gedanken über das DB-Design gemacht hat, was Tabellen, Datentypen und Beziehungen zwischen Tabellen usw. angeht. Für die Länge einer Abfrage gibt es grundlegend glaub ich keine Einschränkung. Die Geschwindigkeit hängt natürlich auch davon auf wieviele Tabellen die Abfrage ausgeführt wird. Und wie man die Abfrage schreibt. Ich empfehle dazu bei mehreren Tabellen immer wenn möglich einen "Subselect" anzuwenden, da der etwas schneller ist, als ein direkter Vergleich.
Es gibt auch auf diversen Seiten im Internet Benchmarks zu den einzelnen Datenbankmanagementsystemen (*was für ein wort*). Z.b. bei http://www.mysql.com
Geschwindigkeiten sind natürlich auch von der Internetanbindung abhängig, da ja die meissten Datenbanken auch für Online-Abfragen verwendet werden.
Die Dauer, die eine Abfrage braucht, kann man glaub ich auch anzeigen lassen. Frag mich aber nicht wie.

Gruss Homer
 
erstmal danke. :)

dass access als dbms (falls man access überhaupt so nennen kann) nicht besonders schnell ist, ist mir auch schon klar. ich muss nur trotzdem leider damit arbeiten.
was ich aber eigentlich wissen wollte, ist folgendes...
ich hab hier mal einen fetzen code aus meinem vb-programm:
Code:
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset

conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.path & "database\default.mdb"
rs.Open "SELECT * FROM X_Anmeldung;", conn, vbOpenStatic, vbLockPessimistic, -1 '<- here we go.
die zeile, in der ich das recordset öffne (rs.Open) enthält ja nur eine einzige anweisung. und da diese anweisung eine sql-abfrage enthält, läuft das programm natürlich erst weiter, wenn die abfrage ein vollständiges ergebnis geliefert hat.
das problem dabei ist einfach, dass das programm eben 'hängt', solange die abfrage läuft - und der user muss solange warten.
 
Hast du das in einer Schleife drin oder warum dauert das so lange. Oder hast du da tatsächlich zig Tausend Datensätze drin. Dann würde ich mir tatsächlich überlegen auf ein anderes DBMS umzusteigen. Du kannst noch ein paar sachen versuchen und zwar setzt mal vor die Abfrage den Befehl DoEvents. Oder stell die Verbindung an die DB über ODBC her. Welche Version von VB hast du und was willst du da genau machen, denn obwohl Access DB's und VB langsam ist dürfte das nicht ewig dauern.

Zu dem hängen das dürfte sich tasächlich mit DoEvents lösen können:
Code:
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
DoEvents  '<--- da einfügen, bewirkt das dein Programm nicht hängt
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.path & "database\default.mdb"
rs.Open "SELECT * FROM X_Anmeldung;", conn, vbOpenStatic, vbLockPessimistic, -1 '<- here we go.
 
nein, ich hab das nicht in einer schleife. es ist auch nur ein rechner (mit 800mhz ?!) bei dem mir das aufgefallen ist, auf allen anderen läuft das sofort.
das dauert zwar auch nur ein paar sekunden, aber es ist einfach nervig und verwirrend, wenn man das programm startet, und erst ca. 10 sekunden später wird das formular angezeigt.
den connectionstring hatte ich vorher auch schon über eine odbc-schnittstelle eingerichtet, aber das war auch nicht besonders viel schneller - deswegen hab ich's ja auch mal mit der version da oben versucht.
und an vb liegt es auch nicht. ich hab das gleiche mal mit delphi compiliert und auf dem gleichen pc war es immer noch recht langsam.

auf das mit dem doevents bin ich zwar auch schon gekommen. ich hab's dann nur sofort wieder verworfen, weil ich das bis jetzt nur gebraucht hab, damit das programm auch in schleifen reagiert - und das ist ja keine schleife.
 

Neue Beiträge

Zurück