Ich möchte eine tags
-Spalte vom Typ json
:
z.B.
%Vor% Ich möchte jede tag
in den Arrays indizieren, ohne die Länge der Arrays zu kennen (variable Länge).
Wenn ich also nach Zeilen frage, die tag2
enthalten, sollte es die Zeilen 1, 3 zurückgeben.
JSON-Spalten können nicht indiziert werden. Sie können diese Einschränkung umgehen indem Sie einen Index für eine generierte Spalte erstellen, die einen Skalar extrahiert Wert aus der JSON-Spalte
Nach "extrahiert einen skalaren Wert", bedeutet dies, dass ich extrahieren muss & amp; jedes Element in den Arrays einzeln indizieren (was bedeutet, dass ich die maximale Länge des Arrays kennen muss, um sie alle zu indizieren)? Wie indexiere ich ein Array variabler Länge?
Nach "extrahiert einen skalaren Wert", bedeutet dies, dass ich extrahieren muss & amp; Indexieren Sie jedes Element in den Arrays einzeln [...]?
Sie können so viele Objekte extrahieren, wie Sie möchten. Sie werden als Skalare (z. B. Zeichenfolge) und nicht als zusammengesetzte Werte (JSON) gespeichert.
%Vor%Erstellen wir einen Index mit nur einem Element (erster Wert vom JSON-Objekt):
%Vor% Sie haben jetzt einen Index für die VARCHAR-Spalte tags_scalar
. Der Wert enthält Anführungszeichen, die auch übersprungen werden können:
Wie Sie sich schon vorstellen können, kann die generierte Spalte mehr Elemente aus dem JSON enthalten:
%Vor%oder verwenden Sie einen anderen gültigen Ausdruck für die automatische erzeuge eine Zeichenkette aus der JSON-Struktur, um etwas zu erhalten, das leicht indiziert und durchsucht werden kann wie "tag1tag3tag5tag7".
[...] (was bedeutet, dass ich die maximale Länge des Arrays kennen muss, um sie alle zu indizieren)?
Wie oben erläutert, müssen Sie nichts wissen - NULL-Werte können mit jedem gültigen Ausdruck übersprungen werden. Aber natürlich ist es immer besser zu wissen.
Jetzt gibt es die Architekturentscheidung: Ist der JSON-Datentyp am besten geeignet, um das Ziel zu erreichen? Um dieses spezielle Problem zu lösen? Ist JSON das richtige Werkzeug hier? Wird es die Suche beschleunigen?
Wie indexiere ich ein Array variabler Länge?
Wenn Sie darauf bestehen, string:
%Vor%Auf diese oder andere Weise erhalten Sie eine VARCHAR- oder TEXT-Spalte, in der Sie die am besten geeignete Indexstruktur anwenden ( einige Optionen ).
Weiterführende Literatur:
Tags und Links mysql