Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Abfrage dauert zu lange unter Delphi (https://www.delphipraxis.net/183394-abfrage-dauert-zu-lange-unter-delphi.html)

Dumpfbacke 7. Jan 2015 13:19

AW: Abfrage dauert zu lange unter Delphi
 
Zitat:

Zitat von Nersgatt (Beitrag 1285690)
Hängt an der Query noch irgendwas an Ereignissen im AfterOpen, AfterScroll, oder Ähnliches? Oder sind da noch Dinge dran gebunden, wo Ereignisse dran hängen, die lange dauern?


Nein es hängt da nichts dran

Dumpfbacke 7. Jan 2015 13:20

AW: Abfrage dauert zu lange unter Delphi
 
Zitat:

Zitat von Jasocul (Beitrag 1285695)
Mach doch mal vor dem Open ein DisableControls und hinterher ein EnableControls.

Hat leider nichts gebracht

Blup 7. Jan 2015 13:41

AW: Abfrage dauert zu lange unter Delphi
 
Wie bereits gesagt, in der Entwicklungsumgebung wird beim Öffnen der Datenmenge nur der erste Datensatz geholt.
Dann unterbricht die Datenbankabfrage.
Um die Gesamtlaufzeit zu ermitteln, muss man zum letzten Datensatz springen.

Zur Laufzeit hängt vermutlich auch ein Grid an der DataSource.
Das fordert nach dem Öffnen mit Standardeinstellungen automatisch so viele Datensätze an, wie derzeit darstellbar sind.

Die lange Laufzeit ist bei der Datenmenge in Kombination mit dieser Abfrage nicht verwunderlich.
Poste uns doch mal den berechneten Ausführungsplan.

mkinzler 7. Jan 2015 13:45

AW: Abfrage dauert zu lange unter Delphi
 
Bei IN kann auch kein Index greifen. Wenn die Werte mit 'Röhre" beginnen könnte man STARTING WITH statt IN verwenden, dann mit Indexunterstützung.

p80286 7. Jan 2015 13:57

AW: Abfrage dauert zu lange unter Delphi
 
Ich gehe davon aus, daß das IN hinterher mit mehreren Werten gefüllt ist. Niemand wird ein = durch ein IN ersetzen! (oder doch?)

Gruß
K-H

tsteinmaurer 7. Jan 2015 14:19

AW: Abfrage dauert zu lange unter Delphi
 
Jegliche Ungleichheitsoperatoren (<>, IS NOT, NOT IN etc.) können in der Regel nicht durch einen Index bedient werden, d.h. der einzige Index der ev. greift ist auf dem Feld "Eingang".

Mich würde primär mal der Ausführungsplan interessieren.

sx2008 7. Jan 2015 14:43

AW: Abfrage dauert zu lange unter Delphi
 
Und etwas Klarheit zu bekommen würde in Delphi mal folgende Abfrage testen:
SQL-Code:
Select COUNT(*) AS Anzahl
From Material
where Eingang IS NULL and MaterialTyp not in ('Rohre')
and StatusRaus <> 'Auftrag noch nicht erzeugt' and Refernz is not NULL
Diese Abfrage erzeugt auf dem Server annähernd die gleiche Last; allerdings wird nur ein einziger Datensatz an den Client übertragen.
Somit lässt sich erkennen wo der Flaschenhals ist.
Und dann würde ich dir DRINGEND empfehlen das Feld "StatusRaus" als Integerfeld anzulegen.
Überlege dir welche Statuswerte es gibt und welche es in Zukunft noch geben könnte.

Dejan Vu 7. Jan 2015 15:01

AW: Abfrage dauert zu lange unter Delphi
 
Zitat:

Zitat von mkinzler (Beitrag 1285784)
Bei IN kann auch kein Index greifen.

Wieso nicht? ein 'X IN (A,B)' ist identisch mit 'X=A or X=B' und dann kann sehr wohl ein Index greifen. Vielleicht bei FB nicht, aber nur dann, weil FB an der Stelle schlampt.
Zitat:

Zitat von Blup (Beitrag 1285782)
Wie bereits gesagt, in der Entwicklungsumgebung ...

Zitat:

Zitat von Dumpfbacke (Beitrag 1285688)
...Wenn ich die Query im Objektinspektor ...

Meinst Du mit 'Entwicklungsumgebung' Dinge, wie IBExpert, oder wirklich die Delphi-IDE?

tsteinmaurer 7. Jan 2015 15:06

AW: Abfrage dauert zu lange unter Delphi
 
Zitat:

Wieso nicht? ein 'X IN (A,B)' ist identisch mit 'X=A or X=B' und dann kann sehr wohl ein Index greifen. Vielleicht bei FB nicht, aber nur dann, weil FB an der Stelle schlampt.
Ne, Firebird schlampt hier nicht und kann bei einem IN Operator (ohne Negation) natürlich einen Index verwenden sofern der Optimizer anhand der Indexstatistiken der Meinung ist, dass der Zugriff über den Index sinnvoll ist.

Dejan Vu 7. Jan 2015 18:40

AW: Abfrage dauert zu lange unter Delphi
 
Wäre ja wohl auch noch schöner.


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

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