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

Wie kann ich ähnliche Zeichenfolgen in PostgreSQL effizient finden?

Barbara Streisand
Freigeben: 2025-01-06 03:51:40
Original
550 Leute haben es durchsucht

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;
Nach dem Login kopieren

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));
Nach dem Login kopieren
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;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage