MySQL: Performance-Unterschied zwischen tinytext und varchar
Thomas Schmieder
- datenbank
Guten Tag alle zusammen,
hier ists ziemlich kalt *brrrr*
Hat jemand von Euch Erfahrungen mit dem Performance-Unterschied zwischen den Datentypen tinytext und VarChar bei MySQL?
Macht die zusätzliche interne Refenzierung für tinytext was aus, oder sit das sowieso egal?
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo,
Macht die zusätzliche interne Refenzierung für tinytext was aus, oder sit das sowieso egal?
es gibt da eine ziemlich gute Beschreibung im Archiv:
http://forum.de.selfhtml.org/archiv/2001/7/26998/#m140699
Fazit: feste Laengen koennen einen Vorteil darstellen.
Aber auch hier gilt: kommt darauf (das genaue Problem) an.
Gruss
Thomas
Hallo,
kurz gesagt: feste längen bedeuten einen performancezuwachs, dagegen ist die enstehende menge eher größer
anders dagegen bei varchar, die menge wird minimiert, dagegen ist der aufwand für's dbms größer die einzelen blöcke wieder auseinanderzulegen...
Odium
Hallo Odim,
ich gebe mal ganz unverholen zu, dass ich deine Antwort nicht verstehe...
kurz gesagt: feste längen bedeuten einen performancezuwachs, dagegen ist die enstehende menge eher größer
anders dagegen bei varchar, die menge wird minimiert, dagegen ist der aufwand für's dbms größer die einzelen blöcke wieder auseinanderzulegen...
Feste Satzaufbauten müssten schneller wiederhergestellt werden, als relationale, das leuchtet mir ein. Nur: wird denn in MySQL ein Satz als schlossener Record gespeichert, oder jedes feld in einem eigenen Baum? Dann sieht es nämlich schon anders aus. Da ich ja auf das VarChar-Feld einen Index anlegen möchte (was ja angeblich auf tinytext inzwischen auch funktionieren soll aber nicht tut), könnte das ja vieleicht gar nix bringen. Hier würden mir echte Erfahrungswerte aus tatsächlich existenten Riesentabellen was bringen.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi Thomas,
Feste Satzaufbauten müssten schneller wiederhergestellt werden, als relationale, das leuchtet mir ein.
es geht auch um so banale Dinge wie die Realisierung eines full table scan über die erste Spalte: Bei fester Satzlänge findest Du den nächsten Satzanfang schneller als bei variabler.
Nur: wird denn in MySQL ein Satz als schlossener Record gespeichert, oder jedes feld in einem eigenen Baum?
Letzteres würde mich sehr wundern, weil dann jeder Zugriff auf mehr als ein Feld sehr langsam werden würde. Sinnvollerweise speichert man die Zeilen schon zusammenhängend ab - wenn man aber nur auf bestimmte Kombinationen von Feldern zugreifen will, dann legt man über diese einen kombinierten Index und bekommt dann die entsprechenden Werte aus einem für diese Anforderung optimierten Baum. Legst Du einen Index über _alle_ Spalten einer Tabelle, dann hast Du vollständig doppelte Datenhaltung - wobei eine der beiden für bestimmte Indexzugriffe optimiert ist, die andere für full table scans.
Da ich ja auf das VarChar-Feld einen Index anlegen möchte (was ja angeblich auf tinytext inzwischen auch funktionieren soll aber nicht tut), könnte das ja vieleicht gar nix bringen. Hier würden mir echte Erfahrungswerte aus tatsächlich existenten Riesentabellen was bringen.
Konkretes CREATE TABLE-Statement bitte, und konkrete Query, die Du mit dem Index tunen willst. Und per EXPLAIN kontrollieren, daß mySQL verstanden hat, was Du erreichen willst.
Viele Grüße
Michael
Hallo Michael,
danke erstmal für Deine Antwort. Sie lässt mich doch vermuten, dass tinytext-Felder die Sache bei grossen Tabellen langsamer machen.
Wir haben heute dazu ein paar Tests begeonnen, aber Holger ist noch nicht fertig geworden. Er hatte zum Schluss allerdings nur noch Probleme mit der Funktion microtime(). Vielleicht hatte ich ihm aber auch die falsche genannt...
Schaun wir mal.
Es ist manchmal dir Krux zwiwschen selbermachen und Aufgabe stellen. Ich weiß ja leider nicht alles selber. Das ist ben so. Eine qualifizeirte Nachfrage im Forum führt dann manchmal innerhalb von 10 Minuten zum passenden Lösungsweg. Aber trotzdem sollen auch die bei mir beschäftigten Praktikanten ihre Lernschance haben. Das dauert manchmal leider mehr als einen Tag. Und ich muss sicherstellen, dass ich die Lösung dann auch noch erfahre.
Jede Hilfestellung, den Weg zu finden ist daher mehr wert, als eine fertige Lösung. Das genau zeichnet ja das SelfForum aus!!!
Dies scheint mir aber ein Problem zu sein, bei dem es knallhart zur Sache gehen könnte. Wenn ich heute von PHP5 lese, dann möche ich da meinen Senf nicht zutückhalten. So drei bis zwanzig Problemchen habe ich schon gesammelt.
Hier ging es zwar um MySQL aber wir benutezn ja das PHP-Interface dafür. Könnte ja auch Einfluss haben.
Besonders liebe Grüße aus http://www.braunschweig.de
Tom
Nabend Tom...
danke erstmal für Deine Antwort. Sie lässt mich doch vermuten, dass tinytext-Felder die Sache bei grossen Tabellen langsamer machen.
Sieht so aus. Wenn ich das richtig verstehe lässt ein VarChar jedoch das _Datenvolumen_ anschwillen?
Wir haben heute dazu ein paar Tests begeonnen, aber Holger ist noch nicht fertig geworden. Er hatte zum Schluss allerdings nur noch Probleme mit der Funktion microtime(). Vielleicht hatte ich ihm aber auch die falsche genannt...
Man müsste echt mal eine Funktion für den Kernel schreiben, der genau mitloggt, wie lange eine Aufgabe (bzw. ein Funktionsblock) in der CPU _wirklich_ benötigt. Macht sowas doch bequem...
Es ist manchmal dir Krux zwiwschen selbermachen und Aufgabe stellen. Ich weiß ja leider nicht alles selber. Das ist ben so. Eine qualifizeirte Nachfrage im Forum führt dann manchmal innerhalb von 10 Minuten zum passenden Lösungsweg.
Oder auch nicht. Aber das macht nix, denn wenn die Fragen komplexer werden, bleiben halt nur die Experten[tm] übrig.
Aber trotzdem sollen auch die bei mir beschäftigten Praktikanten ihre Lernschance haben.
Ich danke dir. >M)
Das dauert manchmal leider mehr als einen Tag. Und ich muss sicherstellen, dass ich die Lösung dann auch noch erfahre.
Fragen, wenn die Meldung nicht von selbst kommt? Ich weiß, ich bin Idealist...
Jede Hilfestellung, den Weg zu finden ist daher mehr wert, als eine fertige Lösung. Das genau zeichnet ja das SelfForum aus!!!
Exakt. Und bitte prelle nicht. ;p
Dies scheint mir aber ein Problem zu sein, bei dem es knallhart zur Sache gehen könnte. Wenn ich heute von PHP5 lese, dann möche ich da meinen Senf nicht zutückhalten. So drei bis zwanzig Problemchen habe ich schon gesammelt.
Das geht uns allen so. serialize() ist nur eines davon ;-)
Hier ging es zwar um MySQL aber wir benutzen ja das PHP-Interface dafür. Könnte ja auch Einfluss haben.
Ja natürlich hat es. Wenn du Dinge mit PHP2 gemacht hast, kannst du die heute in einem viertel der Zeit mit der Hälfte an Befehlen erledigen... =)
Das gilt auch für das MySQL-Interface.
Fabian