1
Mich hat es interessiert, wie sich die Geschwindigkeiten von
Inserts bei SQLite3 und Zeos
verändern, mit unterschiedlichen "schreibweisen"; Und habe festgestellt, dass es durchaus erhebliche Unterschiede geben kann.
Ich habe den Test mehrmals durchlaufen, auch mit unterschiedlichen Zahlen und habe folgende Durchschnittszeiten bekommen:
Hier die sortierte Ergebnisse:
Benötigte Zeit % | Funktionsname
48,57 Test2 (Insert mit .add(Format(... siehe auch Test5 )
17,62 Test1 (Insert und exec... direkt hintereinander)
16,88 Test8 (Wie Test7 + Prepare)
16,46 Test7 (Nur ParamByName in Schleife)
0,22 Test4 (Insert; in Transaction, außerhalb der Schleife)
0,21 Test3 (Insert; in Transaction, innerhalb der Funktion)
0,03 Test9 (wie 8 + Transaction)
0,01 Test6 (Wie Test5 mit Transaction)
0,01 Test5 (Direkt, Ohne .ParamByName.)
17,62 Test1 (Insert und exec... direkt hintereinander)
48,57 Test2 (Insert mit .add(Format(... siehe auch Test5 )
0,21 Test3 (Insert; in Transaction, innerhalb der Funktion)
0,22 Test4 (Insert; in Transaction, außerhalb der Schleife)
0,01 Test5 (Direkt, Ohne .ParamByName.)
0,01 Test6 (Wie Test5 mit Transaction)
16,46 Test7 (Nur ParamByName in Schleife)
16,88 Test8 (Wie Test7 + Prepare)
0,03 Test9 (wie 8 + Transaction)
(Funktion 2 hat im Test nicht teilgenommen. Ich war der Annahme, es ist auch mögliche mehrere Inserts mit add zu schreiben, doch das ist so nicht möglich.)
Hier die verschiedene Abschnitte:
Test2,1,8,7: Sind deutlich langsam. Sollte man so keinesfalls verwenden, wenn Geschwindigkeit ein Kriterium sein soll.
Nur ParamByName in der schleife (Test7) ergibt für sich keinen Geschwindigkeitsvorteil, auch nicht mit Prepare verbunden (Test8); Und ergibt nur Sinn, wenn man diese mit Transaction verbindet (Test9). Mit Format() (Test2) sollte man bzgl. Schnelligkeit eher vorsichtig sein, diese war sogar fast dreimal solangsam wie Test1 (Insert,Exec direkt hintereinander).
Test3,4: Insert mit Transactionen gehen bereits erheblich schneller und können/sollten verwendet werden. Dabei spielt es keine Rolle ob "begin transaction / commit) innerhalb der Funktion oder außerhalb ist.
Test9,6,5: Sind nochmal um ca. 0,2 % schneller als Test3 und 4. Variablen direkt in die SQL Anweisung zu schreiben (Test5), war das schnellste; Gleiches mit Transaction (Test6) ist sogar einen Tick langsamer und wird nicht wirklich benötigt.
Sehr gut
409
|
Gut
457
|
Geht so
456
|
Schlecht
423
|
Sehr schlecht
459
|