Heim > Datenbank > MySQL-Tutorial > Wie kann ich JSONB-Arrays in Postgres effizient nach Millionen von Zeilen abfragen?

Wie kann ich JSONB-Arrays in Postgres effizient nach Millionen von Zeilen abfragen?

Linda Hamilton
Freigeben: 2025-01-06 13:42:41
Original
266 Leute haben es durchsucht

How Can I Efficiently Query JSONB Arrays in Postgres for Millions of Rows?

Verwendung von JSONB-Operatoren und GIN-Indizierung für Postgres-Abfragen

In Postgres erfordert der Zugriff auf JSON-Array-Elemente eine andere Syntax als der von Ihnen beschriebene Ansatz. Um auf das erste Element eines JSON-Arrays zuzugreifen, verwenden Sie anstelle Ihres vorherigen Versuchs einen nullindizierten Ausdruck.

Die empfohlene Abfragesyntax für dieses Szenario lautet:

e->0->>'event_slug'
Nach dem Login kopieren

Darüber hinaus bietet Postgres Folgendes an umfassende Unterstützung für JSONB-Datentypen. Mit Postgres 12 und höher können Sie die SQL/JSON-Pfadfunktionalität für „Größer-als“- oder „Kleiner-als“-Vergleiche mithilfe von JSONB-Spalten nutzen.

Für Ihre spezifische Abfrage besteht der empfohlene Ansatz darin, einen GIN-Index mit zu erstellen die Operatorklasse jsonb_path_ops:

CREATE INDEX locations_events_gin_idx ON locations USING GIN (events jsonb_path_ops);
Nach dem Login kopieren

Wenn dieser Index vorhanden ist, sollte die folgende Abfrage den Index nutzen und effizient bereitstellen Ergebnisse:

SELECT l.*
FROM locations l
WHERE l.events @? '$[*] ? (@.event_slug == "test_1") ? (@.end_time.datetime() < "2014-10-13".datetime())'
Nach dem Login kopieren

In älteren Versionen von Postgres ohne direkte „Größer als“- oder „Kleiner als“-Operatoren für JSONB kann eine materialisierte Ansicht verwendet werden, um eine ähnliche Leistung zu erzielen. Dazu gehört das Speichern relevanter Attribute in normalisierter Form, sodass Sie herkömmliche Btree-Indizes für effiziente Abfragen erstellen können.

Angesichts Ihres Anwendungsfalls mit Millionen von Zeilen mit jeweils etwa 10 Ereignissen sind sowohl der GIN-Index- als auch der Materialized-View-Ansatz realisierbar Lösungen. Die beste Option hängt von Faktoren wie der Komplexität Ihrer Abfragen, der Häufigkeit der Aktualisierungen und den gewünschten Leistungsmerkmalen ab.

Das obige ist der detaillierte Inhalt vonWie kann ich JSONB-Arrays in Postgres effizient nach Millionen von Zeilen abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage