![]() |
Re: Effiziente SELECT Abfrage
Ein sehr sinnvolles Vorhaben.
Ich habe eine Anwendung übernommen, wo überhaupt nicht mit Parametern gearbeitet wurde. Insbesondere bei Schnittstellen, wo 1000x ein Insert ausgeführt wird, habe ich festgestellt, dass es nach umstellung auf Parameter um den Faktor 3 schneller lief. Da haben einige Leute erstaunt geschaut :mrgreen: Und so stelle ich nun Stück für Stück den gesamten Code auf Parameter um. |
Re: Effiziente SELECT Abfrage
Zitat:
|
Re: Effiziente SELECT Abfrage
Zitat:
|
Re: Effiziente SELECT Abfrage
Zitat:
Danke, Christoph |
Re: Effiziente SELECT Abfrage
Ja, da bei prepared Statement zu einem nur die Parameter übertragen werden und zudem das Parsen, Planbilden usw. entfällt
|
Re: Effiziente SELECT Abfrage
Zitat:
Delphi-Quellcode:
Danke+Gruß,
function TmyADOFunctions.ADOInsertIntoDB(a_SQLStatement: string): TMyADOResultStruct;
var myADOResultStruct : TMyADOResultStruct; lCounter : integer; begin assert(true = Prod_Conn_CorrectConnected); myADOResultStruct := TMyADOResultStruct.Create; // init try ADOCommand1.Connection.BeginTrans; ADOCommand1.CommandType := cmdText; ADOCommand1.CommandText := a_SQLStatement; ADOCommand1.Connection.Execute(a_SQLStatement, lCounter); myADOResultStruct.counter := lCounter; ADOCommand1.Connection.CommitTrans; myADOResultStruct.status := true; except // wenn Fehler abbrechen... on E: Exception do begin ADOCommand1.Connection.RollbackTrans; myADOResultStruct.status := false; myADOResultStruct.exception := E; myADOResultStruct.exceptionTxt := E.Message; end; end; // try-except Result := myADOResultStruct; end; Christoph |
Re: Effiziente SELECT Abfrage
Parameter zu verwenden bedeutet aber nicht sofort daß es zu einem prepared Statement wird - das muß die Datenbank-API erstmal unterstützen und dann heißt es doch eher Query.ExecPrepared oder nich?
|
Re: Effiziente SELECT Abfrage
Einmalig ( beim Ersten Insert oder bei Programmstart) Statement setzen und preparieren.
Beim Insert dann nur noch Parameter setzen. Zitat:
Zitat:
|
Re: Effiziente SELECT Abfrage
Zitat:
Danke! |
Re: Effiziente SELECT Abfrage
Einen Faktor 100 bekommst du wenn du die extended Syntax für INSERTs benutzt (die soweit ich weiß nur von MySQL unterstützt wird):
Code:
Du bastelst also einen riesigen SQL String zusammen und fügst damit tonnenweise Zeilen mit einem einzigen Befehl in die Tabelle. Ist limitiert auf die max_allowed_packet Einstellung (per Default auf 1M).
INSERT INTO `mytable` (`col1`, `col2`, `col3`)
VALUES (1, 'bla', 'foo'), (2, 'bla', 'foo'), (3, 'bla', 'foo'), (4, 'bla', 'foo'), (5, 'bla', 'foo'), ... (1000, 'bla', 'foo') |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:33 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