Ähnliche Zeichenfolgen effizient in PostgreSQL finden
Einführung: Das Suchen ähnlicher Zeichenfolgen in großen Datensätzen kann bei der Verwendung zu Leistungsproblemen führen konventionelle Methoden. In diesem Artikel wird eine Lösung vorgestellt, die den Suchprozess erheblich beschleunigt, indem das pg_trgm-Modul von PostgreSQL verwendet wird.
Verwendung von SET pg_trgm.similarity_threshold und dem %-Operator:
Die von Ihnen bereitgestellte Abfrage leidet unter übermäßigen Ähnlichkeitsberechnungen. Um die Effizienz zu steigern, verwenden Sie den Konfigurationsparameter SET pg_trgm.similarity_threshold und den %-Operator:
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;
Dieser Ansatz nutzt einen Trigramm-GiST-Index, wodurch die Suche erheblich beschleunigt wird.
Verwendung von Functional Indizes:
Um die Leistung weiter zu verbessern, sollten Sie die Verwendung funktionaler Indizes zur Vorfilterung in Betracht ziehen mögliche Spiele vor dem Cross-Join. Dies reduziert die Anzahl der erforderlichen Ähnlichkeitsberechnungen, wie in der folgenden Abfrage gezeigt:
CREATE FUNCTION first_char(text) RETURNS text AS $$ SELECT substring(, 1, 1); $$ LANGUAGE SQL; CREATE INDEX first_char_idx ON names (first_char(name));
SELECT similarity(n1.name, n2.name) AS sim, n1.name, n2.name FROM names n1 JOIN names n2 ON first_char(n1.name) = first_char(n2.name) AND n1.name <> n2.name ORDER BY sim DESC;
Schlussfolgerung:
Setzen Sie pg_trgm durch Verwendung des pg_trgm-Moduls Mit .similarity_threshold, dem %-Operator und Funktionsindizes können Sie sogar die Leistung beim Suchen ähnlicher Zeichenfolgen in PostgreSQL erheblich verbessern für große Datensätze.
Das obige ist der detaillierte Inhalt vonWie kann ich ähnliche Zeichenfolgen in PostgreSQL effizient finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!