Maison >base de données >tutoriel mysql >Comment le module pg_trgm de PostgreSQL peut-il trouver efficacement des chaînes similaires dans de grands ensembles de données ?
Recherche rapide de chaînes similaires avec PostgreSQL
L'une des exigences courantes en matière de récupération de texte est de trouver des chaînes similaires à une chaîne d'entrée donnée. . PostgreSQL fournit le module pg_trgm à cet effet. Cependant, lorsqu'il s'agit de grands ensembles de données, l'approche par force brute consistant à calculer les scores de similarité pour chaque paire de chaînes peut devenir inefficace.
L'approche conventionnelle consiste à créer un index GiST sur la colonne de nom en utilisant gist_trgm_ops comme opérateur d'index. . Le problème avec cette approche est qu'elle nécessite de calculer des scores de similarité pour chaque paire d'éléments, ce qui entraîne une complexité temporelle quadratique.
Une solution plus efficace consiste à utiliser l'opérateur % fourni par pg_trgm . En définissant le paramètre pg_trgm.similarity_threshold sur une valeur prédéfinie (par exemple, 0,8), l'optimiseur peut utiliser l'index du trigramme GiST pour filtrer les paires candidates qui sont inférieures au seuil de similarité spécifié. Cela réduit considérablement le nombre de calculs de similarité requis et améliore les performances des requêtes.
SET pg_trgm.similarity_threshold = 0.8; SELECT similarity(n1.name, n2.name) AS sim, n1.name, n2.name FROM names n1 JOIN names n2 ON n1.name <> n2.name AND n1.name % n2.name ORDER BY sim DESC;
Cette requête optimisée utilise l'opérateur % pour pré-filtrer les paires candidates avant de calculer les scores de similarité, améliorant ainsi considérablement les performances des requêtes.
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!