Heim > Datenbank > MySQL-Tutorial > Wie kann ich in PostgreSQL effizient nach Elementen in JSON-Arrays suchen?

Wie kann ich in PostgreSQL effizient nach Elementen in JSON-Arrays suchen?

DDD
Freigeben: 2025-01-21 04:17:11
Original
917 Leute haben es durchsucht

Tipps für die effiziente Suche von JSON-Array-Elementen in PostgreSQL

How Can I Efficiently Search for Elements Within JSON Arrays 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);
Nach dem Login kopieren

Dieser Index ermöglicht effiziente Abfragen mit dem @>-Operator:

SELECT * FROM tracks WHERE artists @> '[{"name": "The Dirty Heads"}]';
Nach dem Login kopieren

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);  -- !
Nach dem Login kopieren

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)';
Nach dem Login kopieren

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'));
Nach dem Login kopieren

Verwenden Sie in Abfragen Array-Operatoren, um Indexausdrücke abzugleichen:

SELECT * FROM tracks
WHERE  '{"The Dirty Heads"}'::text[] <@ (json2arr(artists, 'name'));
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage