Performance Problem mit LENGTH(blob-field)

Performance Problem mit LENGTH(blob-field)

am 07.06.2006 11:02:57 von Zsolt Koppany

Hi,



ich habe eine kleine Tabelle mit blobs und habe Performance Probleme mit dem
Query:



mysql> select length(file) from object_comment;

+--------------+

| length(file) |

+--------------+

| 25543 |

| 36428648 |

| 13824 |

+--------------+

3 rows in set (18.33 sec)



Warum braucht LENGTH so lange? Die Datenbank ist praktisch leer!



So wird die Tabelle definiert:



CREATE TABLE object_comment (id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,

object_id INTEGER NOT NULL,

description TEXT NOT NULL,

description_format CHAR(1),

filename VARCHAR(255),

mimetype VARCHAR(250),

file LONGBLOB,

indexed CHAR(1),

submitted_by INTEGER NOT NULL,

submitted_at DATETIME NOT NULL,

FOREIGN KEY (object_id) REFERENCES object(id) ON DELETE
CASCADE,

FOREIGN KEY (submitted_by) REFERENCES users(id) ON DELETE
CASCADE

);



Ich benutze mysql-4.1.19 auf Windows-XP.



Zsolt

Re: Performance Problem mit LENGTH(blob-field)

am 07.06.2006 11:04:23 von Zsolt Koppany

Sorry, dass es so schleckt aussieht (outlook express).

"Zsolt Koppany" schrieb im Newsbeitrag
news:e664o2$ind$00$1@news.t-online.com...
> Hi,
>
>
>
> ich habe eine kleine Tabelle mit blobs und habe Performance Probleme mit
> dem Query:
>
>
>
> mysql> select length(file) from object_comment;
>
> +--------------+
>
> | length(file) |
>
> +--------------+
>
> | 25543 |
>
> | 36428648 |
>
> | 13824 |
>
> +--------------+
>
> 3 rows in set (18.33 sec)
>
>
>
> Warum braucht LENGTH so lange? Die Datenbank ist praktisch leer!
>
>
>
> So wird die Tabelle definiert:
>
>
>
> CREATE TABLE object_comment (id INTEGER NOT NULL AUTO_INCREMENT PRIMARY
> KEY,
>
> object_id INTEGER NOT NULL,
>
> description TEXT NOT NULL,
>
> description_format CHAR(1),
>
> filename VARCHAR(255),
>
> mimetype VARCHAR(250),
>
> file LONGBLOB,
>
> indexed CHAR(1),
>
> submitted_by INTEGER NOT NULL,
>
> submitted_at DATETIME NOT NULL,
>
> FOREIGN KEY (object_id) REFERENCES object(id) ON DELETE
> CASCADE,
>
> FOREIGN KEY (submitted_by) REFERENCES users(id) ON DELETE
> CASCADE
>
> );
>
>
>
> Ich benutze mysql-4.1.19 auf Windows-XP.
>
>
>
> Zsolt
>
>

Re: Performance Problem mit LENGTH(blob-field)

am 07.06.2006 11:31:38 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: Performance Problem mit LENGTH(blob-field)

am 07.06.2006 11:40:38 von Zsolt Koppany

So weit ich weiss, unterstützt mysql-4.1 keine Triggers.

Zsolt
> Warum speicherst Du überhaupt Files in der DB? Warum schreibst Du keinen
> Trigger, der bei INSERT, ..., die Größe berechnet und in einer extra
> Spalte speichert?
>
>
> end
> Andreas
> --
> Andreas Kretschmer
> Linux - weil ich es mir wert bin!
> GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
> Deutsche PostgreSQL User Group: http://pgug.de

Re: Performance Problem mit LENGTH(blob-field)

am 07.06.2006 13:12:52 von Nico Haase

Heidiho,
*Zsolt Koppany* schrub:
[Quoting repariert]
>> Warum speicherst Du überhaupt Files in der DB? Warum schreibst Du keinen
>> Trigger, der bei INSERT, ..., die Größe berechnet und in einer extra
>> Spalte speichert?
>
> So weit ich weiss, unterstützt mysql-4.1 keine Triggers.

Genauso wenig wie Andreas Kretschmer MySQL unterstützt. Trigger sind
erst ab 5.0.2 verfügbar, siehe
[1].

Zum Hauptproblem hat Andreas aber dann doch recht: Dateien direkt in
der Datenbank zu speichern ist nicht so schön. Wenn du da keinen
wirklich guten Grund für hast, dann speicher sie weiter in irgendeinem
lokalen Ordner und übertrag beim INSERT des Eintrags für die Datei
auch die Dateigröße in die Datenbank, zusammen mit der Pfadangabe der
Datei anstelle dem Dateiinhalt selbst.
mfg
Nico

Footnotes:
==========
[1] http://dev.mysql.com/doc/refman/5.0/en/triggers.html

--
www.buchtips.net - Rezensionen online