Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Hilfe bei Optimierung in SQL (https://www.delphipraxis.net/122124-hilfe-bei-optimierung-sql.html)

mkinzler 9. Okt 2008 22:05

Re: Hilfe bei Optimierung in SQL
 
Delphi-Quellcode:
for Fld := 0 to q.Fields.Count -1 do    // Alle Felder der Tabelle Durcharbeiten
Begin
    FeldName := q.Fields[Fld].FieldName;

    if FeldListe <> '' then FeldListe := FeldListe + ',';
...
for DS := 1 to 30000 do // Alle Datensätze Duchgehen

Pro_RJ 9. Okt 2008 22:08

Re: Hilfe bei Optimierung in SQL
 
Sorry aber das verstehe ich gerade nicht.
Delphi-Quellcode:
   
    // Felder ermitteln
    //==============================

    if CheckBox2.Checked then
    Begin
      for Fld := 0 to q.Fields.Count -1 do
      Begin
        if Fld > 0 then FeldListe := FeldListe + ',';
        FeldListe := FeldListe + q.Fields[Fld].FieldName;
      end;
    end; // End zu if CheckBox2.Checked then
    // Alle Datensätze durcharbeiten
    //==============================
    for DS := 1 to 30000 do
    Begin
      if not CheckBox2.Checked then FeldListe := '';
      WertListe := '';
      INC(GesGearb);
      for Fld := 0 to q.Fields.Count -1 do
      Begin
        FeldName := q.Fields[Fld].FieldName;
        if not CheckBox2.Checked then if FeldListe <> '' then FeldListe := FeldListe + ',';
        if WertListe <> '' then WertListe := WertListe + ',';
        if ((FeldName = 'ZAEHLER') or (FeldName = 'LO'))
....
        then Wert := IntToStr(DS)

slemke76 9. Okt 2008 22:08

Re: Hilfe bei Optimierung in SQL
 
Hi !

ich weiss nicht, ob du
a.) direkt SQL-Statements an IB Express absetzen kannst und
b.) ob das SQL Query kompatibel ist.

Ich würde es in MySQL folgendermassen machen:
insert into archivdb.archivtabelle select * from aktuelldb.tabelle [where ....]

Danach noch ein entsprechendes delete auf die aktuelldb.tabelle machen (wichtig nur, dass du ein eindeutiges Kriterium für die Übertragung hast, was bis einschließlich des deletes nicht verändert wird -> siehe auch Transaktionssicherheit / Lock Table).

Wenn das gehen sollte, wird damit die Schleife komplett gespart und das sollte richtig Schub bringen :-)

lg
Sebastian

Pro_RJ 9. Okt 2008 22:10

Re: Hilfe bei Optimierung in SQL
 
Jup aber das geht erst in FireBird 2.5 soweit ich weis

slemke76 9. Okt 2008 22:11

Re: Hilfe bei Optimierung in SQL
 
Hi !

wäre definitv ein Grund zum Updaten - aber wahrscheinlich gibt es Gründe dagegen !?

lg

mkinzler 9. Okt 2008 22:12

Re: Hilfe bei Optimierung in SQL
 
Nein geht auch schon vorher

sx2008 9. Okt 2008 22:13

Re: Hilfe bei Optimierung in SQL
 
Delphi-Quellcode:
if sender = Button1 then // Wozu? Weg mit der If-Abfrage
Begin
  IBSQL1.Close; // unnötig
  IBSQL1.SQL.text := 'Insert into tabelle ('+FeldListe+') values ('+WertListe+')';
  IBSQL1.ExecQuery;
  IBSQL1.Close; // unnötig
end;

Pro_RJ 9. Okt 2008 22:13

Re: Hilfe bei Optimierung in SQL
 
Ohh ok das wuste ich nicht. Ab welcher FB-Version geht das schon?

Pro_RJ 9. Okt 2008 22:17

Re: Hilfe bei Optimierung in SQL
 
Zitat:

Zitat von sx2008
Delphi-Quellcode:
if sender = Button1 then // Wozu? Weg mit der If-Abfrage
Begin
  IBSQL1.Close; // unnötig
  IBSQL1.SQL.text := 'Insert into tabelle ('+FeldListe+') values ('+WertListe+')';
  IBSQL1.ExecQuery;
  IBSQL1.Close; // unnötig
end;

Das
"if sender = Button1 then" ist nur da ich verschiedene Versionen teste also TIBSQL,TIBScript usw.

Ich habe es mal in

Delphi-Quellcode:
//      if sender = Button1 then
      Begin
//        IBSQL1.Close;
        IBSQL1.SQL.text := 'Insert into PCBCasioZBPos ('+FeldListe+') values ('+WertListe+')';
        IBSQL1.ExecQuery;
//        IBSQL1.Close;
      end;
Geändert : macht ca 0,02Sekunden aus

slemke76 9. Okt 2008 22:19

Re: Hilfe bei Optimierung in SQL
 
Hi !

Alternativ könnte man noch prüfen, ob die DB

a.) Multiple Inserts unterstützt (insert into tabelle (a,b,c) values (1,2,3), (4,5,6) oder
b.) Die Keys temporär deaktiveren kann (alter table tabelle disable/enable keys)

Ich bin ein wenig "mysql-lastig" :mrgreen:

lg


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:05 Uhr.
Seite 2 von 4     12 34      

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