Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Select Optimierung bei Tabelle mit 15.Mio Datensätzen (https://www.delphipraxis.net/163088-select-optimierung-bei-tabelle-mit-15-mio-datensaetzen.html)

yörsch 15. Sep 2011 13:06

AW: Select Optimierung bei Tabelle mit 15.Mio Datensätzen
 
Die Datenbank kenne ich, wir benutzen die nur für wenige hundert Einträge... dageht´s schnell...
Es ist halt keine Oracle oder so...

Kannst du StordProcedures einsetzten? Die sind immer schneller.
Da kann man auch mit # schnell mal ne´Temporäre Tabelle erstellen...

Ich würd erst nach dem Datum selektieren, alles in eine Temporäre Tabelle schieben
und dann weiter mit der Uhrzeit suchen...

Und wenn die Datenbank nicht vollig FIX ist : Indiezes können einen select auch langsamer machen...
Da würd ich auch mal rum spielen...

mika 15. Sep 2011 13:11

AW: Select Optimierung bei Tabelle mit 15.Mio Datensätzen
 
Hallo,


ich teste grade die verschiedenen Zugriffszeiten aus, dabei messe ich die ausführung des sqls ebenso wie die zeiten die ich brauche um die datensätze durchzugehen. Das mit dem Order By muss ich noch ausprobieren aber ich hätte die schon gerne geordnet vorliegen.

Soweit wie es jetzt aussieht werde ich die Zeit Klausel im Where wegfallen lassen und das selber prüfen, es scheint recht performant zu sein...

Und nur die Ergebnismenge sind 10.000 Datensätze... ^^ In der Tabelle liegen ein paar mehr vor (siehe Titel dieses Threads)...
Aber ich glaube ich werde das so lassen das ich einfach die Daten eines Tages hole und die Zeiten dann in der Schleife prüfe...

Code:
SELECT * FROM ZielLog WHERE zl_date = '2011-10-01'
Öffnen der ZielLog-Daten: 11,7297 ms.
Anzahl ZielLog-Daten: 17280
Iterieren der ZielLog-Daten: 836,6813 ms.
Davon sind 721 Datensätze in dem von mir gesuchten Zeitraum, die ich in meine Liste gespeichert hab.

Sieht mir annehmbar aus bis jetzt.... ca 0,85 Sekunden für die entnahme der mir wichtigen Daten der Tabelle vom öffnen bis zum schliessen :)

--edit:

unterschied (2x gemessen) mit und ohne order by ^^:
Mit Order By
Öffnen der ZielLog-Daten: 2334,4217 ms.
Öffnen der ZielLog-Daten: 2324,6134 ms.;

Ohne Order By
Öffnen der ZielLog-Daten: 13,0694 ms.;
Öffnen der ZielLog-Daten: 2,8676 ms.;

p80286 15. Sep 2011 13:13

AW: Select Optimierung bei Tabelle mit 15.Mio Datensätzen
 
Zitat:

Zitat von Neumann (Beitrag 1124543)

Weiter würde ich für die Query persistente Felder anlegen, ist schneller als FieldByName, was in der Schleife doch oft aufgerufen wird.

Könntest Du das einmal erläutern oder ein Beispiel zeigen?
Wenn ich mich richtig erinnere steht in der Hilfe, daß .FieldbyName die schnellste Möglichkeit wäre an die Daten zu kommen.
(Unterschiede hab ich allerdings noch nicht bemerkt)

Gruß
K-H

DeddyH 15. Sep 2011 13:21

AW: Select Optimierung bei Tabelle mit 15.Mio Datensätzen
 
http://fgaillard.com/2010/11/fieldby...-to-be-honest/

mika 15. Sep 2011 13:31

AW: Select Optimierung bei Tabelle mit 15.Mio Datensätzen
 
Zitat:

Zitat von DeddyH (Beitrag 1124559)

mit dem tipp aus dem link:
Iterieren der ZielLog-Daten: 815,6767 ms.;

mit fieldbyname:
Iterieren der ZielLog-Daten: 890,5021 ms.;


gruß, mika

mika 15. Sep 2011 13:38

AW: Select Optimierung bei Tabelle mit 15.Mio Datensätzen
 
Alles klar, ich denke ich lasse das jetzt so. Danke an euch alle für eure Hilfe !

joachimd 15. Sep 2011 14:02

AW: Select Optimierung bei Tabelle mit 15.Mio Datensätzen
 
Code:
SELECT * FROM ZielLog WHERE zl_date between '2011-10-01' AND '2011-10-01' AND zl_time between '05:00:00' AND '06:00:00' ORDER BY zl_date, zl_time
Update auf 10.1 dürfte erst einmal einiges bringen. Dann fällt mir auf: Wenn Du nur ein Datum hast, warum dann ein BETWEEN?
Probiers mal so:

Code:
SELECT * FROM ZielLog WHERE zl_date=:datum AND zl_time>:zeit1 AND zl_time<:zeit2 ORDER BY zl_time
Übrigens: Indexe auf die einzelnen Felder bringen mehr als ein kombinierter, weil diese dann viel flexibler eingesetzt werden können und mit Sicherheit auch kleiner sind;)

mika 15. Sep 2011 14:24

AW: Select Optimierung bei Tabelle mit 15.Mio Datensätzen
 
Hallo Herr Dürr :)

Lange ists her... Ich habe den SQL Befehl ja inzwischen verändert auf

SELECT
zl_date,
zl_time,
zl_Transpondernr,
zl_schlachnummer
FROM
ZielLog
WHERE
zl_date = between '2011-10-01' AND '2011-10-01'

Von Bis Datum habe ich vorsichtshalber eingebaut falls ich mal Daten exportieren soll von dem Zeitraum 23:00 bis 01:00, da muss ich dann aber auch noch mal nachschauen falls sowas passiert.

Mit der Bearbeitungszeit bin ich inzwischen sehr zufrieden, ich liege unter einer Sekunde was auch mein Ziel war.

Danke für alle eure Antworten, ich widme mich dann mal dem nächsten Problem :)

Neumann 15. Sep 2011 17:49

AW: Select Optimierung bei Tabelle mit 15.Mio Datensätzen
 
An K H:

Habe ich mal irgendwo gelesen, scheit auch logisch da jedes mal das Feld über den Namen gefunden werden muss.

Hier eine alte Nachricht von alzaimar dazu:

[QUOTE=alzaimar;443250]
Zitat:

Zitat von Union
Eine andere Lösung wäre das Generieren benannter TField-Objekte zur Laufzeit oder persistent. Das liegt in der Geschwindigkeit zwischen FieldByName und FieldIndex

Nein. Persistente Felder sind die schnellste Zugriffsmöglichkeit. Per Index ist es um ca 1.5 langsamer, mit Feldnamen ca. 10x.


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

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