pasta: mysql LONG BLOB

Hallo,

ich habe kürzlich festgestellt, dass wenn ich Fotos aus einer Datenbank über einen Primärschlüssel auslese, dies performanter ist, als übers Dateisystem.
Im Test wurden 200.000 Dateien in eine MySQL-Datenbank eingelesen und On-the-fly ausgegeben.
On-the-fly ist auch aus verschiedenen Gründen bei der Ausgabe vom Dateisystem erforderlich da die Fotos dynamische Merkmale enthalten.

Der Zugriff über den Primärschlüssel dauert bei 200.000 Testfotos akzeptable 0.03 Sekunden.

Zum Überblick hier mal die Struktur:

CREATE TABLE fotos (
 id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
 description CHAR(50),
 bin_data LONGBLOB,
 header ENUM('JPEG','PNG','GIF'),
 tags VARCHAR(200),
 autor VARCHAR(30)
);

Der Zugriff auf UNIQUE's und Primärschlüssel ist erstaunlich schnell und darauf möchte ich ungern verzichten.
Alles andere ist jedoch grausam langsam.

Allein schon ein einfaches "SELECT id FROM fotos WHERE autor = '$kunde'" dauert fast 15 Sekunden, weil "autor" keine UNIQUE/INDEX-Spalte ist.

Links auf die Fotos auf der Festplatte zu setzen scheidet für mich aus da ich dann nicht in den Performancegenuß komme. Außerdem möchte ich mir die unangenehme Wartung von möglichen Bad Files ersparen.
Das Thema ist für mich vom Tisch und sollte hier auch kein Gesprächsgegenstand sein.

Relevante Konfigurationsvariablen von mySQL sind:
key_buffer = 16M
max_allowed_packet = 24M
table_cache = 64

  1. OOOPS, hab ganz vergessen, dass es zwischen FULLTEXT, Primary Key und INIQUE auch noch den guten alten INDEX gibt ;)
    Muss die Müdigkeit gewesen sein.
    Thema geschlossen.