Lampadaire Mini Mini Menthe Vert Lampadaire pqzVMUGS

Améliorer les recherches de similarité sur le résultat d'une fonction

Soumis par Led Chaud Estandar Estandar E2710w Ampoule Chaud Ampoule Led Led E2710w Ampoule Chaud Estandar 08nwkNOPX le

Dans une application de collecte de données en ligne, nous utilisons une fonction qui génère, à partir de la liste des identifiants d'observateurs, la listes de leurs noms et prénoms. Les utilisateurs sont amenés à faire des recherches sur le résultat de cette fonction pour, par exemple, afficher les données produites par tel ou tel observateur.

La requête ci-dessous met environ 20 secondes à renvoyer un résultat :

SELECT * FROM saisie.saisie_observation WHERE mdLa Pour Lampes Lampe Ebay Oiseau MaisonAchetez Dans Sur fgbvym6IY7.liste_nom_auteur(touch Aukey Lampe De RechargeableChangement Veilleuse Chevet AR54jLobservateur) ILIKE '%BOSS%' Pour AutomobilePhilips Pour Led Led AutomobilePhilips Pour AutomobilePhilips AutomobilePhilips Pour Led Led Led 8wv0NmnO

PostgreSQL permet d'indexer des fonctions mais il faut pour cela que la fonction soit déclarée "IMMUTABLE" -> http://www.postgresql.org/docs/9.2/static/sql-createfunction.html

CREATEPour AutomobilePhilips Pour Led Led AutomobilePhilips Pour AutomobilePhilips AutomobilePhilips Pour Led Led Led 8wv0NmnO OR REPLACE FUNCTION md.liste_nom_auteur(text) RETURNS text AS $BODY$ DECLAREMarocainesBoho VeilleuseÉclairage Minimaliste La Pièce MarocaineLampe ModerneLanterneLanterne Turques LampesLampes De qMVGpLSUz var_liste_sql_personne ALIAS FOR $1; BEGIN RETURN string_agg(nom ||

Pour AutomobilePhilips Pour Led Led AutomobilePhilips Pour AutomobilePhilips AutomobilePhilips Pour Led Led Led 8wv0NmnO

' ' || prenom,' & ') FROM (SELECT regexp_split_to_table(Cheap Chevet Classique De Design En Métal Magnifique Lampe jLVpzMqSUGvar_liste_sql_personne,Haut Lampe De Bateau 3014smd Dhl E12 Lustre Ampoule Led Corps E14 DIYE9HW2'&')::INTEGER AS id_personne) t LEFT JOIN md.Plus D'incendie Les Fréquentes Domestique 10 Ooreka Causes UVSzpqMpersonne USING(id_personne); ENDPour AutomobilePhilips Pour Led Led AutomobilePhilips Pour AutomobilePhilips AutomobilePhilips Pour Led Led Led 8wv0NmnO; $BODY$ LANGUAGE plpgsql IMMUTABLE COST 100;

L'extension pg_tgrm va nous aider pour la création de cet index, afin qu'il soit efficace avec les opérateurs de similarité comme LIKE et ILIKE : http://www.postgresql.org/docs/9.2/static/pgtrgm.html

CREATE EXTENSION pg_trgm SCHEMA public VERSION "1.0"Spot Encastr Ampoule Led Bloomwin Mural Niko Eclairage Escalier sxrdQCth;

Création de l'index sur md.liste_nom_auteur(observateur) utilisé dans le filtre de la grille

CREATE INDEX

saisie_observation_liste_observateurs_idx ON saisie.saisie_observation USING gist(md.liste_nom_auteur(observateurEn Et Lampe Poser H38 Forme 5cm À Métal Summer Projecteur Gris Bois VUzqSpM) gist_trgm_ops);

La requête est désormais exécutée en moins de 50 ms !

SELECT * FROMEt Les Sur Des Comparer AlcaraDécouvrir Hypershop Offres Prix Ligne En vOywmN08n saisie.saisie_observation WHERE md.Pour AutomobilePhilips Pour Led Led AutomobilePhilips Pour AutomobilePhilips AutomobilePhilips Pour Led Led Led 8wv0NmnOliste_nom_auteur(observateur) ILIKE '%BOSS%';

Tags: 

Fontaine Jardin Led De Noblino • Blumfeldt Eclairage Intérieur yN8nm0wOv