Maison > base de données > tutoriel mysql > Comment indexer efficacement les tableaux JSON dans PostgreSQL pour une récupération plus rapide des éléments ?

Comment indexer efficacement les tableaux JSON dans PostgreSQL pour une récupération plus rapide des éléments ?

Mary-Kate Olsen
Libérer: 2025-01-21 04:21:09
original
274 Les gens l'ont consulté

Indexez efficacement les tableaux JSON dans PostgreSQL pour une récupération plus rapide des éléments

Identifier et récupérer rapidement des éléments dans un tableau JSON dans une table PostgreSQL peut être un défi. Pour des performances optimales, il est important de comprendre la technologie d’indexation adaptée à vos besoins spécifiques en matière de données et de requêtes.

How to Efficiently Index JSON Arrays in PostgreSQL for Faster Element Retrieval?

Utilisation de JSONB dans PostgreSQL 9.4

PostgreSQL 9.4 introduit le type de données binaire JSON jsonb, qui améliore considérablement les possibilités d'indexation. Utilisez jsonb pour créer des index GIN directement sur les tableaux JSON.

CREATE TABLE tracks (id serial, artists jsonb);
CREATE INDEX tracks_artists_gin_idx ON tracks USING gin (artists);
Copier après la connexion

Cela active les requêtes pouvant utiliser les index GIN, par exemple :

SELECT * FROM tracks WHERE artists @> '["The Dirty Heads"]';
Copier après la connexion

@> représente l'opérateur "contient" de jsonb.

Vous pouvez également utiliser la classe d'opérateur jsonb_path_ops GIN (non définie par défaut, généralement plus petite et plus rapide) :

CREATE INDEX tracks_artists_gin_idx ON tracks USING gin (artists jsonb_path_ops);
Copier après la connexion

Optimiser pour les valeurs de nom uniques

Si votre colonne artists contient uniquement un tableau de valeurs nommées de manière unique, il est plus efficace de stocker les valeurs sous forme de primitives de texte JSON plutôt que d'objets. Cela élimine le besoin de clés redondantes.

CREATE TABLE tracks (id serial, artistnames jsonb);
INSERT INTO tracks VALUES (2, '["The Dirty Heads", "Louis Richards"]');
CREATE INDEX tracks_artistnames_gin_idx ON tracks USING gin (artistnames);
Copier après la connexion

Exemple de requête :

SELECT * FROM tracks WHERE artistnames ? 'The Dirty Heads';
SELECT * FROM tracks WHERE artistnames @> '"The Dirty Heads"'::jsonb;
Copier après la connexion

Gestion de json dans PostgreSQL 9.3

Pour les versions PostgreSQL antérieures à 9.4, des fonctions invariantes et des index GIN peuvent être utilisés.

Créer une fonction :

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)';
Copier après la connexion

Créez ensuite la fonction index :

CREATE INDEX tracks_artists_gin_idx ON tracks USING gin (json2arr(artists, 'name'));
Copier après la connexion

Utilisez une requête qui correspond à l'expression d'index :

SELECT * FROM tracks WHERE '{"The Dirty Heads"}'::text[]
Copier après la connexion

Assurez-vous toujours que les fonctions utilisées dans l'index sont immuables pour permettre l'indexation des fonctions. Opérateurs clés...

L'article a réécrit le texte original, en utilisant un langage plus concis, et a ajusté certaines phrases, mais conserve le contenu principal du texte original et l'emplacement des images.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal