PostgreSQL での類似した文字列の効率的な検索
はじめに: 大規模なデータセットで類似した文字列を検索すると、次の使用時にパフォーマンスの問題が発生する可能性があります。従来の方法。この記事では、PostgreSQL の pg_trgm モジュールを使用して検索プロセスを大幅に高速化するソリューションを紹介します。
SET pg_trgm.similarity_threshold と % 演算子の使用:
指定したクエリ過剰な類似度計算に悩まされます。効率を高めるには、SET pg_trgm.similarity_threshold 設定パラメータと % 演算子を利用します。
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;
このアプローチでは、トライグラム GiST インデックスを活用し、検索を大幅に高速化します。
関数の利用インデックス:
パフォーマンスをさらに向上させるには、関数インデックスを使用して、クロス結合の前に一致する可能性のあるものを事前にフィルタリングすることを検討してください。これにより、次のクエリに示すように、必要な類似度計算の数が削減されます。
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;
結論:
pg_trgm モジュールを使用することで、SET pg_trgm .similarity_threshold、% 演算子、および関数インデックスを使用すると、類似したものを見つけるパフォーマンスを大幅に向上させることができます。 PostgreSQL の文字列 (大規模なデータセットであっても)。
以上がPostgreSQL で類似した文字列を効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。