So erstellen Sie einen Index für JSON-Felder in MySQL
Einführung in mehrwertige Indizes
Ab MySQL 8.0.17, InnoDB Unterstützt die Erstellung mehrwertiger Indizes. Dabei handelt es sich um sekundäre Indizes, die für die Spalten von JSON-Speicherwert-Arrays definiert sind. Für einen einzelnen Datensatz können mehrere Indexdatensätze vorhanden sein. Die spezifische Syntaxdefinition für diesen Indextyp:
CAST(expression AS type ARRAY), zum Beispiel CAST(data->'$.zipcode' AS UNSIGNED ARRAY). Sie können wie gewöhnliche Indizes auch in EXPLAIN angezeigt werden.
Mehrwertigen Index erstellen
Mehrwertige Indizes können wie andere Indizes beim Erstellen einer Tabelle hinzugefügt oder über ALTER TABLE oder CREATE INDEX erstellt werden.
JSON-Objektfeldindex
Syntax
ALTER TABLE customers ADD INDEX idx_mv_custinfo_list( ( CAST( custinfo -> '$.key' AS UNSIGNED array ) ) );
Hinweis: Es gibt hier zwei Schichten einzelner Klammern außerhalb der CAST-Syntax! , wenn Sie einen weniger schreiben, wird ein Fehler gemeldet!
Testfall
PS: Die Fälle im Artikel beziehen sich auf die Fälle in den offiziellen Dokumenten und werden nur als Tests verwendet, daher ist die Benennung nicht besonders Tatsächlich müssen Sie sich während des Entwicklungsprozesses strikt an die Entwicklungsvorgaben des Unternehmensteams halten und dürfen nicht faul sein!
DROP TABLE IF EXISTS `customers`; /*建表语句*/ CREATE TABLE customers ( id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, modified DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, custinfo JSON NOT NULL ); /*插入写测试数据*/ INSERT INTO customers VALUES ( NULL, NOW(), '{"key":94582,"value":"asdf"}' ), ( NULL, NOW(), '{"key":94568,"value":"gjgasdasdf"}' ), ( NULL, NOW(), '{"key":94477,"value":"ghasdfsdf"}' ), ( NULL, NOW(), '{"key":94536,"value":"hagsdfgdf"}' ), ( NULL, NOW(), '{"key":94507,"value":"wasfgjdf"}' ); /*添加多值索引*/ ALTER TABLE customers ADD INDEX idx_mv_custinfo_list( ( CAST( custinfo -> '$.key' AS UNSIGNED array)) ); /*测试 MEMBER OF 语法*/ SELECT * FROM customers WHERE 94507 MEMBER OF ( custinfo -> '$.key' ); /*测试 JSON_CONTAINS 语法*/ SELECT * FROM customers WHERE JSON_CONTAINS( custinfo -> '$.key', CAST( '[94582]' AS JSON )); /*测试 JSON_OVERLAPS 语法*/ SELECT * FROM customers WHERE JSON_OVERLAPS ( custinfo -> '$.key', CAST( '[94477]' AS JSON ));
Sehen Sie sich den Ausführungsplan an und stellen Sie fest, dass der Index verwendet werden kann:
Wenn nötig Erstellen Sie mehrere Werte für den Zeichentyp Index. Es muss sich um den Zeichensatz utf8mb4 handeln und die Sortierung ist utf8mb4_0900_as_cs. Andernfalls wird ein Fehler gemeldet:
Wenn Sie erstellen möchten Ein mehrwertiger Index für eine binäre Binärzeichenfolge. Die Sortierung muss binär sein, andernfalls wird der Fehler nicht unterstützt.
Nachdem die Sortierregeln geändert wurden, kann der Index erfolgreich hinzugefügt werden:
ALTER TABLE customers ADD INDEX idx_mv_custinfo_list( ( CAST( custinfo -> '$[*].key' AS UNSIGNED array ) ) );
Testfall
DROP TABLE IF EXISTS `customers`; /*建表语句*/ CREATE TABLE customers ( id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, modified DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, custinfo JSON NOT NULL ); /*插入写测试数据*/ INSERT INTO customers VALUES ( NULL, NOW(), '[{"key":94582},{"key":94536}]'), ( NULL, NOW(), '[{"key":94568},{"key":94507},{"key":94582}]'), ( NULL, NOW(), '[{"key":94477},{"key":94507}]'), ( NULL, NOW(), '[{"key":94536}]'), ( NULL, NOW(), '[{"key":94507},{"key":94582}]'); /*添加多值索引*/ ALTER TABLE customers ADD INDEX idx_mv_custinfo_list( ( CAST( custinfo -> '$[*].key' AS UNSIGNED array)) ); /*测试 MEMBER OF 语法*/ SELECT * FROM customers WHERE 94507 MEMBER OF ( custinfo -> '$[*].key' ); /*测试 JSON_CONTAINS 语法*/ SELECT * FROM customers WHERE JSON_CONTAINS( custinfo -> '$[*].key', CAST( '[94582, 94507]' AS JSON )); /*测试 JSON_OVERLAPS 语法*/ SELECT * FROM customers WHERE JSON_OVERLAPS ( custinfo -> '$[*].key', CAST( '[94477, 94582]' AS JSON ));
Erstellen Sie einen mehrwertigen Index in einem kombinierten Index
ALTER TABLE customers ADD INDEX idx_age_custinfo$list_modified ( age, (CAST( custinfo -> '$[*].key' AS UNSIGNED ARRAY )), modified );
Testfall
DROP TABLE IF EXISTS `customers`; /*建表语句*/ CREATE TABLE customers ( id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, age tinyint(4) not null, modified DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, custinfo JSON NOT NULL ); /*插入写测试数据*/ INSERT INTO customers VALUES ( NULL, 21, NOW(), '[{"key":94582},{"key":94536}]'), ( NULL, 22, NOW(), '[{"key":94568},{"key":94507},{"key":94582}]'), ( NULL, 23, NOW(), '[{"key":94477},{"key":94507}]'), ( NULL, 24, NOW(), '[{"key":94536}]'), ( NULL, 25, NOW(), '[{"key":94507},{"key":94582}]'); /*添加多值索引*/ alter table customers DROP INDEX idx_age_custinfo$list_modified ; ALTER TABLE customers ADD INDEX idx_age_custinfo$list_modified ( age, (CAST( custinfo -> '$[*].key' AS UNSIGNED ARRAY )),modified ); ALTER TABLE customers ADD INDEX idx_age_custinfo$list_modified ((CAST( custinfo -> '$[*].key' AS UNSIGNED ARRAY )), age,modified ); ALTER TABLE customers ADD INDEX idx_age_custinfo$list_modified ( age,modified, (CAST( custinfo -> '$[*].key' AS UNSIGNED ARRAY )) ); /*测试 MEMBER OF 语法*/ SELECT * FROM customers WHERE 94536 MEMBER OF ( custinfo -> '$[*].key' ) and modified = '2021-08-05 10:36:34' and age = 21;
Einschränkungen des mehrwertigen Index
Ein mehrwertiger Index darf nur den Wert eins enthalten attribute
Dieser Index unterstützt derzeit nur drei Syntaxen
#🎜 🎜#Derzeit können nur die Syntax MEMBER OF, JSON_CONTAINS () und JSON_OVERLAB() mehrwertige Indizes verwenden.
( CAST( custinfo -> '$.key' AS UNSIGNED array)) kann das Array in der Syntax weggelassen werden. Der Grund, warum das Hinzufügen erzwungen wird, liegt darin, dass es sich nicht um eine Array-Struktur handelt, wenn es nicht hinzugefügt wird. Wenn es sich nicht um eine Array-Struktur handelt, können die oben genannten drei Methoden nicht direkt verwendet werden. Die Syntax muss vor der Verwendung über JSON_ARRAY () konvertiert werden, was zum Ausfall des Index führt. Unabhängig davon, ob das zu indizierende Feld ein Einzelwertfeld oder ein Array-Feld ist, muss daher das Array-Schlüsselwort hinzugefügt werden.
#🎜 🎜 #Kann nicht mit Präfixindex kombiniert werden. 🎜🎜## 🎜🎜#Dieser Satz bedeutet, dass die Operation ALGORITHM=COPY verwendet, dh der Index wird erstellt, indem eine neue Tabellenstruktur erstellt und die Daten dann dorthin kopiert werden. Daher sind DML-Operationen während dieses Prozesses nicht zulässig.
Mehrwertige Indizes haben klare Anforderungen für Zeichensatztypfelder
#🎜 🎜#Die Sortierung des binären Zeichensatzes muss binär sein.Die Sortierung des utf8mb4-Zeichensatzes muss utf8mb4_0900_as_cs sein.Kein anderer Zeichensatz oder keine andere Sortierung kann einen mehrwertigen Index erstellen Beim Erstellen wird eine Fehlermeldung angezeigt, dass die aktuelle Version nicht unterstützt wird.
Anwendungsszenarien
Die Anwendungsszenarien mehrwertiger Indizes sind sehr breit! Mit ihm sind viele Beziehungstabellen nicht mehr verwendbar! Nehmen wir ein einfaches Beispiel: Benutzer-Tags In vielen Szenarien erhalten Benutzer verschiedene Tags, z. B. 1 groß, 2 reich, 3 gutaussehend. Um nachfolgende Statistiken oder Filterabfragen effizienter zu gestalten, können wir dieses Tag nicht direkt verwenden Da die Abfrageeffizienz ohne einen Index nicht hoch ist, wird häufig eine Zuordnungstabelle zum Speichern der Benutzer-Tag-Beziehung verwendet. Aber jetzt können wir bei mehrwertigen Indizes das Tag als Feld speichern!
Dies ist nur eine der kleinen Szenen. Der Benutzer kann es in alles ändern, und die Bezeichnung kann auch in jedes andere Attribut geändert werden, solange das Ding mehrere Attributwerte hat Wenn dieses Attribut nicht mit anderen Tabellen verknüpft werden muss, können Sie mehrwertige Indizes verwenden! Mehrwertige Indizes unterstützen keine Tabellenzuordnung und sind daher nicht geeignet, wenn Sie dieses Feld für die Tabellenzuordnung verwenden müssen.
Das obige ist der detaillierte Inhalt vonSo erstellen Sie einen Index für JSON-Felder in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Laravel ist ein PHP -Framework zum einfachen Aufbau von Webanwendungen. Es bietet eine Reihe leistungsstarker Funktionen, darunter: Installation: Installieren Sie die Laravel CLI weltweit mit Komponisten und erstellen Sie Anwendungen im Projektverzeichnis. Routing: Definieren Sie die Beziehung zwischen der URL und dem Handler in Routen/Web.php. Ansicht: Erstellen Sie eine Ansicht in Ressourcen/Ansichten, um die Benutzeroberfläche der Anwendung zu rendern. Datenbankintegration: Bietet eine Out-of-the-Box-Integration in Datenbanken wie MySQL und verwendet Migration, um Tabellen zu erstellen und zu ändern. Modell und Controller: Das Modell repräsentiert die Datenbankentität und die Controller -Prozesse HTTP -Anforderungen.

MySQL und PhpMyAdmin sind leistungsstarke Datenbankverwaltungs -Tools. 1) MySQL wird verwendet, um Datenbanken und Tabellen zu erstellen und DML- und SQL -Abfragen auszuführen. 2) PHPMYADMIN bietet eine intuitive Schnittstelle für Datenbankverwaltung, Tabellenstrukturverwaltung, Datenoperationen und Benutzerberechtigungsverwaltung.

Im Vergleich zu anderen Programmiersprachen wird MySQL hauptsächlich zum Speichern und Verwalten von Daten verwendet, während andere Sprachen wie Python, Java und C für die logische Verarbeitung und Anwendungsentwicklung verwendet werden. MySQL ist bekannt für seine hohe Leistung, Skalierbarkeit und plattformübergreifende Unterstützung, die für Datenverwaltungsanforderungen geeignet sind, während andere Sprachen in ihren jeweiligen Bereichen wie Datenanalysen, Unternehmensanwendungen und Systemprogramme Vorteile haben.

Artikelzusammenfassung: Dieser Artikel enthält detaillierte Schritt-für-Schritt-Anweisungen, um die Leser zu leiten, wie das Laravel-Framework einfach installiert werden kann. Laravel ist ein leistungsstarkes PHP -Framework, das den Entwicklungsprozess von Webanwendungen beschleunigt. Dieses Tutorial deckt den Installationsprozess von den Systemanforderungen bis zur Konfiguration von Datenbanken und das Einrichten von Routing ab. Durch die Ausführung dieser Schritte können die Leser schnell und effizient eine solide Grundlage für ihr Laravel -Projekt legen.

In MySQL besteht die Funktion von Fremdschlüssel darin, die Beziehung zwischen Tabellen herzustellen und die Konsistenz und Integrität der Daten zu gewährleisten. Fremdeschlüssel behalten die Wirksamkeit von Daten durch Referenzintegritätsprüfungen und Kaskadierungsvorgänge bei. Achten Sie auf die Leistungsoptimierung und vermeiden Sie bei der Verwendung häufige Fehler.

Der Hauptunterschied zwischen MySQL und Mariadb ist Leistung, Funktionalität und Lizenz: 1. MySQL wird von Oracle entwickelt und Mariadb ist seine Gabel. 2. Mariadb kann in Umgebungen mit hoher Last besser abschneiden. 3.MariADB bietet mehr Speichermotoren und Funktionen. 4.Mysql nimmt eine doppelte Lizenz an, und Mariadb ist vollständig Open Source. Die vorhandene Infrastruktur, Leistungsanforderungen, funktionale Anforderungen und Lizenzkosten sollten bei der Auswahl berücksichtigt werden.

SQL ist eine Standardsprache für die Verwaltung von relationalen Datenbanken, während MySQL ein Datenbankverwaltungssystem ist, das SQL verwendet. SQL definiert Möglichkeiten, mit einer Datenbank zu interagieren, einschließlich CRUD -Operationen, während MySQL den SQL -Standard implementiert und zusätzliche Funktionen wie gespeicherte Prozeduren und Auslöser bereitstellt.

MySQL und PhpMyAdmin können in den folgenden Schritten effektiv verwaltet werden: 1. Erstellen und Löschen von Datenbank: Klicken Sie einfach in phpMyadmin, um sie zu vervollständigen. 2. Verwalten Sie Tabellen: Sie können Tabellen erstellen, Strukturen ändern und Indizes hinzufügen. 3. Datenbetrieb: Unterstützt das Einsetzen, Aktualisieren, Löschen von Daten und Ausführung von SQL -Abfragen. 4. Daten importieren und exportieren: Unterstützt SQL, CSV, XML und andere Formate. 5. Optimierung und Überwachung: Verwenden Sie den Befehl optimizetable, um Tabellen zu optimieren und Abfrageanalysatoren und Überwachungstools zu verwenden, um Leistungsprobleme zu lösen.
