Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Mehrere Datensätze mit SQL-Befehl Update schneller aktualisieren (https://www.delphipraxis.net/212157-mehrere-datensaetze-mit-sql-befehl-update-schneller-aktualisieren.html)

hoika 17. Jan 2023 03:55

AW: Mehrere Datensätze mit SQL-Befehl Update schneller aktualisieren
 
Hallo,
wozu dieser Index?
Wenn er nichts nützt, schadet er eher.

Bitte das hier mal sorgfältig durchlesen:
https://dzone.com/articles/improve-m...uery-profiling

Indizes sollen in erster Linie die Reduktion von Daten beschleunigen,
also alles was im "where" steht.
Dazu gehören Felder des Order By eher nicht dazu.

Bitte mal die betreffende Tabelle (Lager) incl. der aktuellen Indizes posten.

Mein "prepare" weiter vorn bezog sich auf Queries.
Bei SPs sollte das schon erledigt sein.
Und Prepare wird vor der Nutzung der Query gemacht,
wenn man sie mehrfach benutzen will.

dataspider 17. Jan 2023 11:33

AW: Mehrere Datensätze mit SQL-Befehl Update schneller aktualisieren
 
Zitat:

Zitat von ggscholz (Beitrag 1517023)

Delphi-Quellcode:
function StoreInToPlaceUpdate(pStoreId, pBuildingId, pRoomId: Integer; pSize,
      pItemNbr: string; pCategoryNbr, pAssemblyStatus, pStation: Integer; pComment:
      string; pOrderNbr, pSequenceNbr: integer; out oPlace: string): Integer;
var
   sp: TUniStoredProc;
begin
  Result:= 0;
  try
    sp:= TuniStoredProc.Create(nil);
    sp.Connection := fMainForm.coMariaDb;
    sp.StoredProcName := 'StoreInToPlaceUpdate';
    sp.PrepareSQL;
    sp.Params[0].AsInteger:= pStoreId;
    ...
    sp.ExecSQL;
    oPlace:= sp.Params[13].AsString;
    Result :=sp.Params[12].AsInteger
  finally
    FreeAndNil(sp);
  end;
end;

Du rufst StoreInToPlaceUpdate bei 1000 Datensätzen 1000 Mal auf?
Du erzeugst also jedes Mal erst TuniStoredProc, machst jedes Mal ein Prepare etc.

Wenn, dann Erzeugen, Prepare und Freigabe in einer äusseren Procedure, welche die StoreInToPlaceUpdate dann aufruft mit der UniStoredProc als ersten Parameter.
Und TuniStoredProc.Options.AutoPrepare auf False.

Frank

ggscholz 17. Jan 2023 16:55

AW: Mehrere Datensätze mit SQL-Befehl Update schneller aktualisieren
 
Ich lese das gerade, da stimmt was nicht 🧨

Zitat:

Zitat von bernardtho (Beitrag 1517481)
Ich habe einen Index erstellt, der WgSize-, Boden-, Korridor- und Ortsdaten enthielt, aber bei Verwendung dieses SP keine Leistungsverbesserung festgestellt.

Ein einfaches Update mit dem gleichen Ergebnis per Batch ist in etwa 200 ms fertig, aber ich habe 33000 ms gebraucht, als ich tausend Änderungen zum Testen gesendet habe (alles unter den gleichen Bedingungen getestet).

Können Sie die Schritte erläutern, die ich ausführen muss, um eine gespeicherte Prozedur zum Ausführen einer Stapelaktualisierung zu verwenden? Wäre das machbar?

Wer schreibt da meinen Text ab? Boden- und Korridor-??? Ohne meine Datenbank zu haben, macht dieser Beitrag nicht viel Sinn.

Uwe Raabe 17. Jan 2023 17:03

AW: Mehrere Datensätze mit SQL-Befehl Update schneller aktualisieren
 
Nach der Signatur ist das Spam für ein Spiel...

hoika 17. Jan 2023 17:41

AW: Mehrere Datensätze mit SQL-Befehl Update schneller aktualisieren
 
Hallo,
Einen Index habe ich auf die Felder WgSize,floor,corridor, place gesetzt, wirklich gebracht hat das aber für diese SP nicht wirklich was.

Ein einziger Index für alle 4 Felder?

Gibt es einen Index für StoreId.
Hast Du mal einen Query-Analyzer über das Select laufen lassen?
Werden Indizes verwendet?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 Uhr.
Seite 2 von 2     12   

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