AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Join Abfrage schneller machen
Thema durchsuchen
Ansicht
Themen-Optionen

Join Abfrage schneller machen

Ein Thema von Walter Landwehr · begonnen am 17. Nov 2022 · letzter Beitrag vom 18. Nov 2022
Antwort Antwort
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
384 Beiträge
 
Delphi 10.4 Sydney
 
#1

Join Abfrage schneller machen

  Alt 17. Nov 2022, 13:01
Datenbank: Firebitd • Version: 2.5 • Zugriff über: IBO
Hallo gibt es eine Möglichkeit folgende SQL Abfrage schneller zu machen. Der Zugriff kann > 3 Sekunden je nach Menge der Datensätze betragen.
Delphi-Quellcode:
Select D.ICD,
PD.*
from TBL_PATDIAGNOSE PD
left join tbl_Diagnose D on D.DiagnoseNr = PD.DiagnoseNr
where
PD.PatientNr = :PatientNr
order by
PD.Datum Desc
Ich muss eine Datenbank mit 34000 Datensätze updaten und das dauert mehr als 19 Stunden.

Hat jemand einen Tipp.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
629 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Join Abfrage schneller machen

  Alt 17. Nov 2022, 13:20
Dein SQL hat aber nichts mit einem Update zu tun. Also frage ich mich, ob das Problem nicht eher im Update Statement liegt. Wie sieht dieses denn aus?

Betreffs deinem SELECT solltest du auf TBL_PATDIAGNOSE.DiagnoseNr und tbl_Diagnose.DiagnoseNr einen Index auf der DB haben (oder PK). Dann solltest du am besten wegen dem Order By, was du aber hoffentlich in deinem Update nicht so drin hast, auch einen Descending Index auf TBL_PATDIAGNOSE.Datum haben.

Wie lange dauert denn dieses SELECT? Ich vermutet mal dein Update ruft diesen Join 34'000 mal auf. Teile uns doch bitte mit, wie dein Update genau aussieht.
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
384 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Join Abfrage schneller machen

  Alt 17. Nov 2022, 13:44
Ich habe in der Tabelle TBL_Patdiagnose ein neues Feld ICD eingefügt.
Nun will ich aus der Tabelle TBL_Diagnose den ICD Wert holen und in die Tabelle TBL_Patdiagnose einfügen.
Meine Idee war Folgendermaßen:
1. Tabelle TBL_Patdiagnose in eine Schleife abarbeiten und jeweils updaten mit
Update Tbl_Patdiagnose PD set PD.ICD = :ICD wehre PD.PATDIAGNOSENR = :PATDIAGNOSENR ICD und Patdiagnose aus der join Abfrage.

Indexe sind alle vorhanden.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#4

AW: Join Abfrage schneller machen

  Alt 17. Nov 2022, 14:09
Wenn ich das nun richtig verstehe, dann soll in die Tabelle tblPatDiagnose für jeden Datensatz (eines oder aller Patienten) der ICD-Wert eingetragen werden, der in der Tabelle tbl_Diagnose zur entsprechenden Diagnose zu finden ist. Das entspricht zwar nicht der dritten Normalform aber da wird es sicherlich einen Grund für geben.

Bewerkstelligen läßt sich das durch ein SQL-Statement:
Code:
UPDATE tblPATDIAGNOSE PD set PD.ICD = (select D.ICD from tblDiagnose D where D.DiagnoseNr = PD.DiagnoseNr)
Das Statement macht das mit allen Datensätzen, also für alle Patienten.
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Join Abfrage schneller machen

  Alt 17. Nov 2022, 14:10
.. wenn Du die Ausgabe der select - join Abfrage (ohne auf die Patienten ID zu filtern)
in eine Liste/Dictionary speicherst und diese dann für das update abfragst.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.176 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Join Abfrage schneller machen

  Alt 17. Nov 2022, 14:31
Bei so Bulk-Operationen kann man vorher alle Indices dekativieren und nacher wieder aufbauen.
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
384 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Join Abfrage schneller machen

  Alt 17. Nov 2022, 15:12
Danke Thomas das hats gebracht 45 min hats gedauert.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#8

AW: Join Abfrage schneller machen

  Alt 17. Nov 2022, 16:29
Hmm, 45 Minuten kommen mir da immer noch ziemlich lang vor.
Rufst Du dieses Update in einer Schleife immer wieder auf?
Ich hätte eigentlich eine Laufzeit im Millisekunden- bis Sekunden-Bereich erwartet.
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#9

AW: Join Abfrage schneller machen

  Alt 18. Nov 2022, 20:40
Da du aus D nur die ICD brauchst, erzeuge eine Index auf:
D.DiagnoseNr, D.ICD
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:19 Uhr.
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