


Wie kann ich in PostgreSQL effizient nach Elementen in JSON-Arrays suchen?
Jan 21, 2025 am 04:17 AMTipps für die effiziente Suche von JSON-Array-Elementen in PostgreSQL
Um die Suche nach bestimmten Elementen in einem JSON-Array zu optimieren, sollten Sie unbedingt die PostgreSQL-Version und Datenstruktur berücksichtigen.
PostgreSQL 9.4 und JSONB
In PostgreSQL 9.4 und höher bietet der binäre JSON-Datentyp jsonb
deutlich verbesserte Indizierungsfunktionen. Sie können einen GIN-Index direkt im jsonb
-Array erstellen:
CREATE TABLE tracks (id serial, artists jsonb); -- ! CREATE INDEX tracks_artists_gin_idx ON tracks USING gin (artists);
Dieser Index ermöglicht effiziente Abfragen mit dem @>
-Operator:
SELECT * FROM tracks WHERE artists @> '[{"name": "The Dirty Heads"}]';
Alternativ können Sie die spezielle jsonb_path_ops
GIN-Operatorklasse verwenden:
CREATE INDEX tracks_artists_gin_idx ON tracks USING gin (artists jsonb_path_ops); -- !
Die Abfrageanweisung bleibt unverändert.
PostgreSQL 9.3 und JSON
Erwägen Sie für PostgreSQL 9.3 die Verwendung einer IMMUTABLE
-Funktion, um die Elemente eines JSON-Arrays in ein Array von Textwerten zu extrahieren:
CREATE OR REPLACE FUNCTION json2arr(_j json, _key text) RETURNS text[] LANGUAGE sql IMMUTABLE AS 'SELECT ARRAY(SELECT elem->>_key FROM json_array_elements(_j) elem)';
Erstellen Sie dann einen funktionalen GIN-Index für das extrahierte Array:
CREATE INDEX tracks_artists_gin_idx ON tracks USING gin (json2arr(artists, 'name'));
Verwenden Sie in Abfragen Array-Operatoren, um Indexausdrücke abzugleichen:
SELECT * FROM tracks WHERE '{"The Dirty Heads"}'::text[] <@ (json2arr(artists, 'name'));
Bitte beachten Sie, dass die Funktionsindizierung nur mit IMMUTABLE
-Funktionen verwendet werden kann. Überprüfen Sie die Veränderlichkeit der Funktion json_array_elements()
und aller anderen verwendeten JSON-Funktionen.
Das obige ist der detaillierte Inhalt vonWie kann ich in PostgreSQL effizient nach Elementen in JSON-Arrays suchen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

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

Reduzieren Sie die Verwendung des MySQL -Speichers im Docker

Wie verändern Sie eine Tabelle in MySQL mit der Änderungstabelleanweisung?

So lösen Sie das Problem der MySQL können die gemeinsame Bibliothek nicht öffnen

Führen Sie MySQL in Linux aus (mit/ohne Podman -Container mit Phpmyadmin)

Ausführen mehrerer MySQL-Versionen auf macOS: Eine Schritt-für-Schritt-Anleitung

Wie sichere ich mich MySQL gegen gemeinsame Schwachstellen (SQL-Injektion, Brute-Force-Angriffe)?

Wie konfiguriere ich die SSL/TLS -Verschlüsselung für MySQL -Verbindungen?
