dedlfix: MySQL utf-8 sehr langsam

Beitrag lesen

echo $begrüßung;

Ich kann keinen Index darauf legen, weil die 2 Spalten Text-Spalten sind und man da nur 333-Chars nehmen darf

wieso nur 333 Zeichen? Du hast 1000 Bytes, enthalten Deine Inhalte wirklich mal nur 3-Byte-Zeichen? Außerdem sollte dies reichen. Bei Vergleichen mit %suchbegriff ... hilft Dir sowieso kein Index, außer einem Volltextindex.

MySQL reserviert bei UTF-8 3 Bytes pro Zeichen für jeden Index-Eintrag. Anscheinend kommt es damit schneller zurecht als mit einer variablen Zeichen-Länge.

Bis zu 500 Zeichen bekommt man, wenn man für diese Spalte UCS-2 verwendet. Das hat den Nachteil, dass nun generell 2 Byte für jedes Zeichen für dieses Feld verwendet werden. Die Frage ist, ob der zur Verfügung stehende Platz (Festplatte, Quota beim Provider) dann immer noch reicht.

Ansonsten kann man den Index auch auf x Zeichen beschränken.

Wie hast Du die Daten in den betreffenden Spalten behandelt?
Diese Frage verstehe ich leider nicht.
Kannst du sie bitte anders vormulieren?

Wenn Deine Tabelle vorher nach ISO-xxxx-y kodierte Daten enthalten hat, nun nach UTF-8 kodierte Daten enthalten soll, dann mußt Du die Daten entsprechend konvertieren. Bloß weil Du ein neues Etikett auf eine Spalte klebst, ändert sich doch nicht deren Inhalt.

Beim Etikett-Kleben konvertiert MySQL den Inhalt gleich mit. Voraussetzung, dass dabei alles klappt, ist, dass das alte Etikett zum bisherigen Inhalt passte.

ALTER TABLE foo CHANGE bar bar VARCHAR(500) CHARACTER SET utf8 COLLATE utf8_general_ci

Das reicht, um den Inhalt von was auch immer nach utf8 zu konvertieren.

echo "$verabschiedung $name";