phpbar.de logo

Mailinglisten-Archive

Blob Felder in der gleichen Tabelle

Blob Felder in der gleichen Tabelle

Andreas Müller mysql at universalware.de
Mit Dez 10 15:47:35 CET 2003


Hallo Sebastian,

> diese Äußerung verwundert mich, wenn man hier schon mitredet sollte man
> doch wenigstens MySQL kennen, zumindest das Handbuch!
>
> es hat einen ganz einfachen Grund: Geschwindigkeit!
>
> da es oft so ist das die Langen Textfelder oder BLOBS (wesentlich)
> seltener gebraucht werden als die restlichen Felder, sie blähen die
> Datei in der die Tabelle abgelegt ist auf, und erhöhen somit die Suche
> nach Daten und vor allem das auslesen der Datensätze, selbst wenn MySQL
> den Index nimmt zum suchen.

naja mich darf das jetzt auch mal wundern. Auf der einen Seite sprichst du
von Suche wenn du z.B. auch Zugriff via Primary Key meinst, weil das ist
alles andere als eine Suche und ignorierst damit Index Zugriffsverfahren auf
Daten. Auf der anderen Seite krizelst du an Geschwindigkeitsoptimierungen
innerhalb der Dateistruktur von MySQL rum.

Die Aussage zum Thema Geschwindigkeit gilt (auch da nur halb) nur by MyISAM
Tabellen. InnoDB z.B. verhält sich in dem Fall ganz anders bzw. dort gibt es
diese Optimierungstricks nicht.

Halb gilt das ganze nur deswegen weil die "Suche" über Index nicht von der
Größe der Datendatei anhängt. Und auch nur deswegen halb weil der
Datenzugriff nur deswegen "langsamer" ist weil er mehr Datenblöck von Platte
lesen muss um die _verzeigerten_ Daten lesen zu können.
Eine separate Datei führt beim Zugriff auf Daten darin zum einen zu einem
select oder join mehr. Außerdem müssen in dem Fall unterm Strich mehr Daten
gelesen werden als nötig.

Noch zu beachten ist der Aspekt das ein Datenbankserver auch hinreichend
Dimensioniert sein sollte. Ich erinnere mich da an eine nette Aussage von
Norbert der da meinte das in einem ordentlichen Datenbankserver die DB
sowieso fast vollständig im Ram gecacht wird :-)

> außerdem ist MySQL mit rein Statischen Tabellenbreiten nun mal schneller
> (laut Handbuch) und Langtexte/BLOBS sind nunmal dynamisch
>
> http://www.mysql.com/doc/en/Data_size.html


Die Aussage im Handbuch

"If you don't have any variable-length columns (VARCHAR, TEXT, or BLOB
columns), a fixed-size record format is used. This is faster but
unfortunately may waste some space. See section 7.1.2 MyISAM Table Formats.
"

gilt nicht uneingeschränkt. Durch einen größeren Datensatz fester größe wird
mehr Platz verbraucht was zu schlechterem Caching und vor allem damit auch
zu mehr IO führt. In Memory Operation da Daten kleiner sind sind immer
schneller als Operation die auf Grund der Datengröße on Disk ausgeführt
werden. Und wie auch schon oben: es gilt nur für MyISAM.

MyISAM hat für den Einsatz in großen Anwendungen erhebliche Probleme. Zu
nennen wäre nur z.B. das Sperren von Tabellen bei INSERT wenn gelöschte
Datensätze vorhanden sind. Oder das Sperren von Tabellen währen dem fetchen
von Daten aus einem Select. Das kann zu Deadlocks in der ganzen Anwendung
führen. Aber das nur mal so am Rand ...

Gruß,
Andreas

PS: Vielleicht greifst du nicht gleich jeden an der dein Ego etwas kränkt.
Solche Aussagen wie
> diese Äußerung verwundert mich, wenn man hier schon mitredet sollte man
> doch wenigstens MySQL kennen, zumindest das Handbuch!
kannst du echt stecken lassen. Vielleicht wirkt das ja bei anderen aber in
meinen Augen machst
du dich so nur lächerlich.
Axo und da es mir gerade einfällt: Ich kenne MySQL seit Jahren im
praktischen Einsatz - das ist allemal besser als ein Handbuch zu kennen und
"laut Handbuch" zu reden.


-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive