Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wenn Sie ein TEXT-Feld in MySQL oder PostgreSQL haben, sollten Sie es in einer separaten Tabelle ablegen?

Nicht mit PostgreSQL, aus dem Handbuch :

Also eine große Zeichenspalte (wie TEXT oder VARCHAR ohne festgelegte Größenbeschränkung) wird getrennt von den Haupttabellendaten gespeichert. PostgreSQL hat also Ihre Optimierung „in eine separate Tabelle schreiben“ eingebaut. Wenn Sie PostgreSQL verwenden, ordnen Sie Ihre Tabelle sinnvoll an und überlassen Sie das Datenlayout PostgreSQL.

Ich weiß nicht, wie MySQL oder andere RDBMs ihre Daten anordnen.

Der Grund für diese Optimierung ist, dass die Datenbank die Daten für jede Zeile normalerweise in zusammenhängenden Blöcken auf der Festplatte speichert, um die Suche zu reduzieren, wenn die Zeile gelesen oder aktualisiert werden muss. Wenn Sie eine TEXT-Spalte (oder einen anderen Typ mit variabler Länge) in einer Zeile haben, ist die Größe der Zeile variabel, sodass mehr Arbeit erforderlich ist, um von Zeile zu Zeile zu gehen. Eine Analogie wäre der Unterschied zwischen dem Zugriff auf etwas in einer verknüpften Liste und dem Zugriff auf ein Array; bei einer verknüpften Liste müssen Sie drei Elemente nacheinander lesen, um zum vierten zu gelangen, bei einem Array versetzen Sie einfach 3 * element_size Bytes von Anfang an und Sie sind in einem Schritt dort.