Autor Beitrag
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Di 06.12.11 13:06 
Ab Firebird2.5 verhalten sich kurze Textblobfelder (< 32KB) wie Varchar-Felder.
dbExpress funktioniert halt anders.

_________________
Markus Kinzler.

Für diesen Beitrag haben gedankt: BrixxtoN
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 06.12.11 13:49 
Große Blobfelder werden in Firebird nicht in der DataPage des Datensatzes gespeichert, sondern in eigenen Blob Pages irgendwo anders in der Datenbank. Somit muss der Server diese Daten von ganz anderen Stellen abrufen, als den Rest der Daten. In der Row steht praktisch nur ein Verweis auf das Blob. Wenn die Zeile in der Datenbank klein ist, kann der Server sogar mehrere Datensätze in einer Page speichern und so auch schneller abrufen.
Dazu kommt, dass immer komplette Blob-Pages gespeichert werden. Wenn Deine Pagesize z.B. 4K ist, und Du ein 5K-Blob speicherst, werden dafür 2 komplette Blob-Pages verwendet, die der Server beim Abrufen auch wieder lesen muss.
Daher, ruf die Daten aus dem Blobfeld erst dann ab, wenn Du es wirklich brauchst (also zur Anzeige). Kannst Dir ja eine Query machen, die Du schon vorbereitest (prepared Query). Das wird die Last auf dem Server stark reduzieren. Und auch der Netzwerkverkehr ist natürlich deutlich geringer.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)

Für diesen Beitrag haben gedankt: BrixxtoN
baka0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 489
Erhaltene Danke: 14

Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
BeitragVerfasst: Di 06.12.11 14:10 
Das liegt vermutlich daran, wie diese die BLOB-Felder cachen.

Wir verwenden (leider) noch die BDE und überlegen auf SQLDirect umzusteigen. Wenn wir ein select * from <Tabelle> auf eine Tabelle mit LOB-Felder machen, dauert das Query.Next bei der BDE um einiges länger als bei SQLDirect (Faktor 100+).
BrixxtoN Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50

Win 7 64bit
Delphi 2010 Enterprise
BeitragVerfasst: Mi 07.12.11 11:56 
Danke an alle für die Mühe.

Ich werde versuchen das umzusetzen was der Jens vorgeschlagen hat.