我是初学者php开发。我需要在我的项目中使用pgsql函数相似。
我有表:
CREATE TABLE IF NOT EXISTS table_name
(id serial primary key,
prg_id TEXT,
code TEXT,
city TEXT,
area TEXT,
street TEXT,
numer TEXT,,
address TEXT)
这张table很大.
现在我需要在这个表中搜索。
我有SQL示例:
SELECT street,
similarity('street' , 'name street') AS similarity,
row_number() OVER () AS rank
FROM table_name
where street% 'name street'
order by rank LIMIT 1;
是工作,但是很慢。
有没有可能把这道题写得更好,使它更有效率?
2条答案
按热度按时间w80xi6nr1#
如果您稍微重写查询并创建GiST索引,它会很快:
然后,您必须使用距离运算符
<->
来代替similarity
函数:这将为您提供
street
与'name street'
最相似的行。如果您想排除不够相似的结果,可以添加WHERE
条件。ryevplcw2#
安装扩展pg_trgm,在此列上创建索引:
并使用EXPLAIN(ANALYZE,VERBOSE,BUFFERS,SETTINGS)为您的SQL语句获得查询计划。它是否有所改进?