Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Insert Optimierung (https://www.delphipraxis.net/166857-insert-optimierung.html)

Franzelchen 4. Mär 2012 15:45

AW: Insert Optimierung
 
Zitat:

Zitat von IBExpert (Beitrag 1154407)
kleiner Tip:

wenn es wirklich um gleichartige einfache inserts geht, dann sparst du eine Menge zeit über execute block
d.h.statt jedes insert statement mit execute/execsql senden stellt du dir deine inserts in einem Block
zusammen.

Code:
execute block
as
begin
  insert into tbl(id,txt) values (1,'A');
  insert into tbl(id,txt) values (2,'B');
  insert into tbl(id,txt) values (3,'C');
  --...
  insert into tbl(id,txt) values (26,'Z');
end

Alle 35000 Datensätze, deren Zahl auf Dauer wächst, in ein oder zwei derartiger Blöcke, also 35000 einzelne Inserts... oder verstehe ich das falsch?
Wie wird dann ein solcher Block in Delphi eingebunden?

himitsu 4. Mär 2012 15:59

AW: Insert Optimierung
 
Ist doch praktisch sowas ähliches, wie mehrere Inserts zusammen, nur in einem anonymen Block verpackt.

Von der Größe des SQL-Statements her könntest du ja nochmal Folgendes probieren, mit der nun neu bekannten SQL-Komponente.
Code:
insert into tbl(id,txt) values (1,'A'), (1,'A'), (1,'A'), (1,'A');
Und wenn die Übertragung der Parameter soviel frißt, bei der Übertagung, dann könnte man ja auch nochmal versuchen keine Parameter zu nutzen.
Aber ob sich das wirklich positiv auswirkt, müßte man mal sehn ... schließlich muß man dann die Parameter selber "ordnungsgemäß" behandeln und das SQL-Statement muß jedesmal neu zusammengebaut und vorallem erneut geparst werden.

Franzelchen 4. Mär 2012 18:05

AW: Insert Optimierung
 
Also ich habe große Schwierigkeiten mir 35000 und mehr Insert befehle in einem Block vorzustellen.
Kann mir zum Thema execute Block jemand Einführungsliteratur nennen?

mkinzler 4. Mär 2012 18:13

AW: Insert Optimierung
 
Ein execute block ist eine SP, die inline deklariert wird. Es ist also SQL/PL möglich. Bei einfachen Inserts sollte aber eine normale parametrisierte Insert-Abfrage ausreichen. Auch hier kannst du die Commits blockweise ausfügren.

Franzelchen 4. Mär 2012 19:05

AW: Insert Optimierung
 
Zitat:

Zitat von mkinzler (Beitrag 1154487)
Ein execute block ist eine SP, die inline deklariert wird. Es ist also SQL/PL möglich. Bei einfachen Inserts sollte aber eine normale parametrisierte Insert-Abfrage ausreichen. Auch hier kannst du die Commits blockweise ausfügren.

SP ist eine stored procedure,
inline ist ???
SQL/PL heißt ???

Warum müssen die Antworten komplizierter sein als die Fragen, welche man versucht zu stellen.

Ich weiß ich bin Anfänger und sollte mich um die Grundlagen selber kümmern. Dennoch, wozu ist das Forum da, wenn es keine Anfänger gäbe, sondern nur Fachleute?

hoika 4. Mär 2012 19:15

AW: Insert Optimierung
 
Hallo,

als Anfänger solltest du ja erst einmal anfangen,
statt sich gleich an die Optimierung zu setzen.

Was ist an 4 min Laufzeit sooo schlimm,
dieses Insert wird doch wohl nicht zu den Haupt-Aufgaben deines Programms gehören.

Mach doch erst mal so weiter.


Noch was zum Probieren

Delphi-Quellcode:
procedure TForm1.InputDatasetClick(Sender: TObject);
var i:Integer;
 startzeit,stopzeit : TDateTime;

begin
startzeit := now;
Screen.Cursor := crHourGlass;
ZConnection.Database := 'c:\msql\firedb.fdb';

 ZQuery1.SQL.text:='INSERT INTO TestTabelle (Wert1, Wert2) VALUES(:v1, :v2)';
 ZQuery1.Prepare;

 for i:=0 to SG1.RowCount-1 do
  begin
    with ZQuery1.params do
    begin
      ParamValues['v1']:=SG1.Cells[0, i];
      ParamValues['v2']:=SG1.Cells[1, i];
    end; // with
   ZQuery1.ExecSQL;
  end; // i
Screen.Cursor := crDefault;
stopzeit := now;
Panel1.Caption :='SuchZeit : '+ FormatDateTime('nn:ss:zzz', StopZeit - StartZeit) ;
end;
Was du leider immer noch nicht geschrieben hattest:
Hat deine Tabelle Indizes ?

Heiko

mkinzler 4. Mär 2012 19:21

AW: Insert Optimierung
 
Zitat:

SP ist eine stored procedure,
Ja.
Zitat:

inline ist ???
Der Code wird nicht gespeichert, wie bei einer SP oder einem Trigger, sondern wird innerhalb einer Abfarge deklariert und existiert dann nur temporär.
Zitat:

SQL/PL heißt ???
PL (procedure language) bieter erweitere Konstrukte wie temp./lokale Variablen, Strukturelmente ( Schleifen, Bedingungen usw.), welche in einer normalen Abfarge nicht möglich sind.
http://www.janus-software.com/fbmanual/

Franzelchen 4. Mär 2012 20:33

AW: Insert Optimierung
 
@ mkinzler

Danke.

@ Hoika

Die Tabelle hat weder Indizes noch Trigger.

Zu dem Quelltext:
ZeosQuery (habe ich gelesen) besitzt die einstellbare Prepare Funktion nicht, da diese Funktion im Quelltext von Zeos bereits fest einprogrammiert ist.

Mein erster Schritt: create DB, zweiter Schritt: create tabelle, dritter Schritt: bring meine Daten in die Tabelle(möglichst schnell).


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:51 Uhr.
Seite 4 von 4   « Erste     234   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz