Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Next; benötigt bei Zeos viel zu lange... (https://www.delphipraxis.net/159467-next%3B-benoetigt-bei-zeos-viel-zu-lange.html)

Teekeks 29. Mär 2011 15:51

Datenbank: Firebird • Version: 7 • Zugriff über: Zeos

Next; benötigt bei Zeos viel zu lange...
 
Hallo!
Ich habe ein großes Problem (welch Wunder :) )
Und Zwar habe ich eine Firebird-Datenbank auf die ich mittels Zeos zugreife.
Jetzt habe ich das Problem dass wenn ich das Ergebniss einer Abfrage wie gewohnt mit
Delphi-Quellcode:
Query.First;
while not EOF do
begin
  //mach was
  Query.Next;
end;
das Next bei etwa 180 Datensätzen entsetzliche 11 Sekunden Insgesamt benötigt.
Dass ist mir viel zu viel.

Die Tabelle auf die er Zugreift hat folgende Felder:
7x Smalint
1x Bigint
1x Varchar(255)
1x blob sub_type 0

In den Blob werden auch nur momentan ca 40Byte rein gespeichert.

Noch als Info: Ich nutze Lazarus.

Jetzt ist meine frage: was kann ich verbessern? Warum braucht das next so lange? (alles andere benötigt nur wenige ms)
Liegt das an dem Blob? (ist mein erstes ^^)

Gruß Teekeks

DeddyH 29. Mär 2011 15:58

AW: Next; benötigt bei Zeos viel zu lange...
 
Wird es schneller, wenn Du das BLOB-Feld einmal in der Abfrage weglässt?

HeikoAdams 29. Mär 2011 15:59

AW: Next; benötigt bei Zeos viel zu lange...
 
Werden insgesamt oder in jeden Blob 40GB geschrieben?:shock: Auf jeden Fall wäre bei dieser Datenmenge ein Index für die Tabelle keine schlechte Idee ;-)

Teekeks 29. Mär 2011 16:15

AW: Next; benötigt bei Zeos viel zu lange...
 
@Heiko: nur 40 Byte nicht GigaByte ^^
@DeddyH: Ja, Tatsächlich...
Aber: ich benötige dieses Blob.
Was läuft da falsch?
Ich habe das Gefühl das wir der Sache näher kommen... :)

DeddyH 29. Mär 2011 16:24

AW: Next; benötigt bei Zeos viel zu lange...
 
Die Frage ist: brauchst Du zur Abfragezeit wirklich alle BLOBS? Falls Du diese in einem DBGrid anzeigst, dann doch sicher nicht. In dem Falle würde ich das BLOB-Feld von der Abfrage ausschließen und erst bei Bedarf (Anzeige der Detaildaten) abfragen.

Teekeks 29. Mär 2011 16:38

AW: Next; benötigt bei Zeos viel zu lange...
 
Ich zeige das ganze nicht in einem DB-Grid dar, sondern verarbeite dabei diese selber von Hand.
Und ich benötige dabei wirklich alle Blobs (ist ja auch nur eines pro Datensatz, dass sollte nun wirklich mal möglich sein bei einem so mächtigen System mal eben 40 Byte je Datensatz zu lesen, selbst mein VarChar ist da größer...).

p80286 29. Mär 2011 16:59

AW: Next; benötigt bei Zeos viel zu lange...
 
Ich hab mir mal sagen lassen, daß für BLOBs ziemlich viel Treibergymnastik notwendig ist.
(Langsam aber geht)
Muß es denn ein BLOB sein?

Gruß
K-H

rollstuhlfahrer 29. Mär 2011 18:06

AW: Next; benötigt bei Zeos viel zu lange...
 
Also wenn es nur (fest) 40 Bytes sind, dann würde ich ein VARCHAR(40) nehmen, welches Case-Sensitive ist. Dann hast du deine 40 Zeichen und die Abfrage sollte sich wesentlich beschleunigen.

Bernhard

Teekeks 29. Mär 2011 20:39

AW: Next; benötigt bei Zeos viel zu lange...
 
Hallo, schon einmal danke für eure Hilfe.
Nein, es ist halt leider nicht Konstant 40 Byte.
Konkret ist es ein Variabler Text mit eigenen Formations-Einheiten.

Bei MySQL gibt es ja den Feldtyp Text, der würde gehen.
Das Problem ist das ein beliebig langer "Text" gespeichert werden soll.

Gibt es denn da einen entsprechenden Typen in Firebird?

Gruß Teekeks

Neutral General 29. Mär 2011 20:46

AW: Next; benötigt bei Zeos viel zu lange...
 
Hallo,

Schau mal hier: http://www.firebirdfaq.org/faq165/

Zitat:

0 - binary data (image, video, audio, whatever)
1 - text (basic character functions work)
2 - BLR (used for definitions of Firebird procedures, triggers, etc.)
:arrow: Versuch das ganze mal mit nem blob und sub_type = 1 (=> Textblob)

Eventuell geht das schneller.

Teekeks 29. Mär 2011 21:26

AW: Next; benötigt bei Zeos viel zu lange...
 
Aha, Ich habe das jetzt mal auf sub_type 1 umgestellt.
Das Ergebnis ist: jetzt ist es etwa doppelt so schnell.
Problem: inzwischen sind es aber auch doppelt so viele Datensätze geworden.
Es sollen zum Schluss etwa 1000 in annehmbarer Geschwindigkeit angezeigt werden.
Momentan sind es 300 bei 13 Sekunden.

Gibt es noch andere Methoden?
Diese ist ja schon mal viel besser, also schon einmal danke bis hier her.

Tyrolean 30. Mär 2011 08:30

AW: Next; benötigt bei Zeos viel zu lange...
 
Vielleicht liegt es auch an Zeos, ich würde mal
http://www.da-soft.com/anydac/
probieren. Kosten zwar, allerdings funktionieren sie auch gut.
Gruß
Günter

mirage228 30. Mär 2011 08:42

AW: Next; benötigt bei Zeos viel zu lange...
 
Ich habe beim Traversieren inbes. bei der Alpha 7 von Zeos auch einige Geschwindigkeitseinbrüche festgestellt. Bei vielen bzw. großen Datensätzen war das schon beachtlich.

Abhilfe schaffte folgende Konstruktion:
Delphi-Quellcode:
var
  R: IZResultSet;
  MyInt: Integer;
begin
  with ZQuery do
  begin
    Open;
    R := DbcResultSet;
    R.BeforeFirst;
    while R.Next do
    begin
      MyInt := R.GetIntByName('IntegerField');
    end;
  end;
end;
Ich hatte zwar MySQL verwendet, aber vielleicht bringt Das ja bei Dir ja auch etwas...

Teekeks 3. Apr 2011 14:23

AW: Next; benötigt bei Zeos viel zu lange...
 
Hallo mirage228!
Deine Methode hat immerhin schon mal bewirkt das der nur noch halb so lange benötigt.

Ich habe mich dann jetzt auf ein varchar(4000) geeinigt.
Damit sollte ich genug platz haben und es ist schön schnell (308 Datensätze= 800ms)

Danke an euch alle für eure Hilfe!

mkinzler 3. Apr 2011 14:53

AW: Next; benötigt bei Zeos viel zu lange...
 
Brauchst du den immer den Inhalt der Blobs, oder wäre es eine Option diese on demand nachzuladen?

Teekeks 3. Apr 2011 17:06

AW: Next; benötigt bei Zeos viel zu lange...
 
Leider benötige ich den wirklich immer.
Ist aber in Ordnung da ich ein Varchar jetzt als Blob missbrauche :)
Das ist zwar nicht sehr schön, funktioniert aber hervorragend :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 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