Ähnliche Zeichenfolgen mit PostgreSQL schnell finden
Eine der häufigsten Anforderungen beim Abrufen von Texten besteht darin, Zeichenfolgen zu finden, die einer bestimmten Eingabezeichenfolge ähnlich sind . PostgreSQL stellt zu diesem Zweck das Modul pg_trgm zur Verfügung. Beim Umgang mit großen Datensätzen kann der Brute-Force-Ansatz zur Berechnung der Ähnlichkeitswerte für jedes Zeichenfolgenpaar jedoch ineffizient werden.
Der herkömmliche Ansatz umfasst die Erstellung eines GiST-Index für die Namensspalte unter Verwendung von gist_trgm_ops als Indexoperator . Das Problem bei diesem Ansatz besteht darin, dass Ähnlichkeitswerte für jedes Elementpaar berechnet werden müssen, was zu einer quadratischen Zeitkomplexität führt.
Eine effizientere Lösung ist die Verwendung des %-Operators, der von pg_trgm bereitgestellt wird . Durch Festlegen des Parameters pg_trgm.similarity_threshold auf einen vordefinierten Wert (z. B. 0,8) kann der Optimierer den Trigram-GiST-Index verwenden, um Kandidatenpaare herauszufiltern, die unter dem angegebenen Ähnlichkeitsschwellenwert liegen. Dies reduziert die Anzahl der erforderlichen Ähnlichkeitsberechnungen erheblich und verbessert die Abfrageleistung.
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;
Diese optimierte Abfrage verwendet den %-Operator, um die Kandidatenpaare vor der Berechnung der Ähnlichkeitswerte vorzufiltern, wodurch die Abfrageleistung erheblich verbessert wird.
Das obige ist der detaillierte Inhalt vonWie kann das pg_trgm-Modul von PostgreSQL ähnliche Zeichenfolgen in großen Datensätzen effizient finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!