在 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中文网其他相关文章!