Speicheranforderungen für die MySQL TEXT-Spalte

Speicheranforderungen für die MySQL TEXT-Spalte

Ich habe eine MySQL-Tabelle, die errormsg2mithilfe der MyISAM-Speicher-Engine aufgerufen wird und etwa ein Dutzend Spalten hat.

Ich schätze, dass zwei dieser Spalten den größten Teil des für jede Zeile verwendeten Speicherplatzes ausmachen und vom Datentyp TEXT sind. Sie sind backtraceund msg.

Ich versuche, den für jede Zeile erforderlichen Speicherplatz abzuschätzen und bin auf den folgenden Widerspruch gestoßen:

show table status where name = 'errormsg2';zeigt, dass dies (data_length + index_length) / rowsetwa 778 Bytes pro Zeile sind.

select avg( bit_length( em.backtrace ) + bit_length( em.msg ) ) / 8 from errormsg2 em;zeigt durchschnittlich 899 Byte Text pro Zeile aus nur diesen beiden Spalten.

Wie ist es möglich, dass die Tabelle mehr Daten speichert, als sie verbraucht? Was übersehe ich?

Antwort1

Zu berücksichtigen sind Kodierungsprobleme. UTF-8 beispielsweise verwendet für einige Zeichen 5 Bytes. Wenn Sie keine oder variable Daten haben, muss die Datenbank das Schlimmste annehmen: dass jedes Zeichen 5 Bytes lang sein könnte. Daher kann sie mehr zuweisen, als sie tatsächlich verwenden muss.

Beachten Sie, dass UTF-16, obwohl angeblich nur 2 Bytes, auch Opfer der gleichen Art von Problemen werden kann: Es muss Surrogatpaare kodieren, die 4 Bytes lang sind. UTF-16 hat mehrere andere Probleme, undmanchebefürworten Sie, immer UTF-8 zu verwenden

verwandte Informationen