Heim >Datenbank >MySQL-Tutorial >Wie kann ich ähnliche Zeichenfolgen in PostgreSQL effizient finden?

Wie kann ich ähnliche Zeichenfolgen in PostgreSQL effizient finden?

Barbara Streisand
Barbara StreisandOriginal
2025-01-06 03:51:40588Durchsuche

How Can I Efficiently Find Similar Strings in PostgreSQL?

Ä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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn