![]() |
Re: Was mache ich falsch? Firebird rattert wie irre auf der
So Update:
Der Code schafft jetzt 8000 in 4 Sekunden...ich denk viel besser wirds nicht gehn.
Delphi-Quellcode:
Allerdings muss ich vorher bei jedem Eintrag ja noch nen Select machen um zu schaun ob der Eintrag schon drin ist und dann nen Update um den Zähler um eins zu erhöhen,
zconnection1.StartTransaction;
qrsecond.SQL.Text:='INSERT INTO SPAM (WORD) VALUES (:WORD)'; for I := 0 to sl.Count-1 do begin qrsecond.ParamByName('WORD').AsString:=sl.Strings[i]; qrsecond.ExecSQL; end; zconnection1.Commit; wie oft das Word schon vorgekommen ist. Falls er nicht drin ist eben den Insert hier. Hm gibts da irgenden Weg um das halbwegs effizient zu lösen? |
Re: Was mache ich falsch? Firebird rattert wie irre auf der
Hallo Gecko,
mach dein WORD zum PrimaryKey und bau um dein ExecSQL ein Try-Except. Wenn die Zahl nicht da ist wird sie hinzugefügt, wenn sie schon da ist wird eine Exception ausgelöst und dann kannst du dein UPDATE machen. Das sollte wesentlich schneller gehen. Gruss Thorsten |
Re: Was mache ich falsch? Firebird rattert wie irre auf der
Hallo Gecko,
Lass doch die Arbeit Firebird machen, dazu hast du ihn (den Vogel ;)) doch. Für deinen Fall dürfte diese SP reichen. Es wird nachgesehen ob der Begriff schon vorhanden ist und entsprechend reagiert. Wichtig ist ein Index auf das Feld "BEGRIFF" für den indizierten Zugriff.
SQL-Code:
alex
CREATE PROCEDURE SP_SPAM_IU (
BEGRIFF VARCHAR(30)) RETURNS ( ANZAHL INTEGER) AS DECLARE VARIABLE ID INTEGER; BEGIN BEGRIFF = UPPER(BEGRIFF); SELECT ID, ANZAHL FROM SPAM WHERE (BEGRIFF = :BEGRIFF) INTO :ID, :ANZAHL; IF (ID is not NULL) THEN BEGIN UPDATE SPAM SET ANZAHL = :ANZAHL +1 WHERE (ID = :ID); END ELSE BEGIN INSERT INTO SPAM ( BEGRIFF, ANZAHL) VALUES ( :BEGRIFF, 1); ANZAHL = 1; END SUSPEND; END |
Re: Was mache ich falsch? Firebird rattert wie irre auf der
warum nicht einfach:
SQL-Code:
INSERT INTO TABLE SET id = 1, Test = 'Test' ON DUPLICATE KEY UPDATE Test = 'Test'
|
Re: Was mache ich falsch? Firebird rattert wie irre auf der
Zitat:
Es funktioniert nämlich nicht und bei google gibts nicht nen einzigen eintrag dazu Was kann man anstattdessen verwenden? |
Re: Was mache ich falsch? Firebird rattert wie irre auf der
Hallo,
der Code On Duplicate klappt erst ab FB2.x. 8000 Einträge in 4 sec sind doch nicht schlecht... Ist auf Word überhaupt ein Index drauf ? Heiko |
Re: Was mache ich falsch? Firebird rattert wie irre auf der
Zitat:
Invalid Token: ON |
Re: Was mache ich falsch? Firebird rattert wie irre auf der
Mit 2.x ist >= 2.1 gemeint
|
Re: Was mache ich falsch? Firebird rattert wie irre auf der
Zitat:
Hm was mach ich da? Den Workaround von alex517 nehmen oder kann man diese Alpha bereits stabil nutzen? (vlt hats ja jemand getestet) |
Re: Was mache ich falsch? Firebird rattert wie irre auf der
Zitat:
Zitat:
![]() Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz