Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-Abfrage langsam? (https://www.delphipraxis.net/192720-sql-abfrage-langsam.html)

Helmi 13. Mai 2017 19:04

Datenbank: Firebird • Version: 2.5 • Zugriff über: ZEOS

SQL-Abfrage langsam?
 
Hallo,

ich hab eine Datenbank die momentan knapp 53000 Datensätze hat.

Wenn ich folgendes Statement absetze, dann dauert das etwa 500-1500ms.
SQL-Code:
SELECT DATUM, UHRZEIT, TEMPSENSOR_1, FEUCHTESENSOR_1 FROM Wetterdaten WHERE DATUM = '12.05.2017' ORDER BY UHRZEIT
(das feste Datum ist normalerweise ein DateTimePicker)

Ich finde das irgendwie langsam.

Ist das eine reele Zeit für so etwas?

jobo 13. Mai 2017 19:12

AW: SQL-Abfrage langsam?
 
Ist ein Index auf dem Datumsfeld?
Der sollte es beschleunigen.

Ansonsten fragt man Datumswerte nicht als String ab. Und speichert sie in der Tabelle auch nicht als String, sondern als Date Typ.
Dann sollte das alles kein Problem sein.

Hilfreich wäre die Spaltendefinition der Datumsspalte in der Tabelle.

nahpets 13. Mai 2017 19:16

AW: SQL-Abfrage langsam?
 
So richtig schnell würd' ich dazu nicht sagen.

Wie oft wird das Statement ausgeführt?

Bei meinen FireBird-DBs ist sowas immer beim ersten Mal deutlich langsamer, als bei wiederholtem Aufruf.

Gibt's 'nen Index auf Datum und einen Index auf Uhrzeit?

Und wie Jobo schon schreibt:

Ein Datum sollte man als Datum speichern.
Ebenso auch Uhrzeit ...

Zeig' uns bitte mal den Quelltext rund um den Aufruf des Statements, eventuell kann man da was verbessern.

Helmi 13. Mai 2017 19:20

AW: SQL-Abfrage langsam?
 
Hallo,

Uhrzeit ist vom Typ Date in der Datenbank.

Ansonsten gibt es keine Indexe.

nahpets 13. Mai 2017 19:26

AW: SQL-Abfrage langsam?
 
Wird's damit besser?
SQL-Code:
CREATE INDEX IX_Wetterdaten_Datum on Wetterdaten (DATUM);
CREATE INDEX IX_Wetterdaten_Uhrzeit on Wetterdaten (Uhrzeit);

Helmi 13. Mai 2017 19:28

AW: SQL-Abfrage langsam?
 
Zitat:

Zitat von nahpets (Beitrag 1371290)
Wird's damit besser?
SQL-Code:
CREATE INDEX IX_Wetterdaten_Datum on Wetterdaten (DATUM);
CREATE INDEX IX_Wetterdaten_Uhrzeit on Wetterdaten (Uhrzeit);

Ich hab einen Indes auf Datum gelegt, krass - jetzt sind es max. 20ms

haentschman 14. Mai 2017 14:57

AW: SQL-Abfrage langsam?
 
Moin...8-)
Zitat:

Uhrzeit ist vom Typ Date in der Datenbank.
Delphi-Quellcode:
SELECT DATUM, UHRZEIT, TEMPSENSOR_1, FEUCHTESENSOR_1 FROM Wetterdaten WHERE DATUM = '12.05.2017' ORDER BY UHRZEIT
.
...und warum übergibst du trotzdem das Datum als string? Damit die DB das casten muß? :gruebel:

himitsu 14. Mai 2017 15:37

AW: SQL-Abfrage langsam?
 
Parameter?

Code:
WHERE DATUM::VARCHAR = '12.05.2017'
WHERE DATUM = '12.05.2017'::DATE
Wie rum Castet die DB eigentlich, bei sowas?

haentschman 14. Mai 2017 15:39

AW: SQL-Abfrage langsam?
 
Zitat:

Parameter?
...versteht sich von allein. :thumb: Manchmal hätte ich einen virtuellen "MÖÖÖP" mit rotem Knopf wenn ich sowas sehe...:stupid:

Helmi 14. Mai 2017 18:56

AW: SQL-Abfrage langsam?
 
Zitat:

Zitat von haentschman (Beitrag 1371360)
...und warum übergibst du trotzdem das Datum als string? Damit die DB das casten muß? :gruebel:

mmmh - irgendwie hatte ich im Hinterkopf, dass Firebird bei Abfragen keine Parameter erlaubt/will/kann.

Nach nem Test funktioniert es aber doch :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 Uhr.
Seite 1 von 2  1 2      

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