在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;
此方法利用 trigram 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中文網其他相關文章!