gpt4 book ai didi

postgresql - 使用 pg_trgm 在 3 亿个地址中搜索

转载 作者:行者123 更新时间:2023-11-29 11:28:23 25 4
gpt4 key购买 nike

我的 PostgreSQL 9.3 数据库中有 3 亿个地址,我想使用 pg_trgm 来模糊搜索这些行。最终目的是实现一个类似于谷歌地图搜索的搜索功能。

当我使用pg_trgm 搜索这些地址时,大约需要30s 才能得到结果。有很多行与默认相似性阈值条件 0.3 匹配,但我只需要大约 5 或 10 个结果。我创建了一个三元组 GiST 索引:

CREATE INDEX addresses_trgm_index ON addresses USING gist (address gist_trgm_ops);

这是我的查询:

SELECT address, similarity(address, '981 maun st') AS sml 
FROM addresses
WHERE address % '981 maun st'
ORDER BY sml DESC
LIMIT 10;

生产环境测试表已被移除。我显示了我的测试环境的 EXPLAIN 输出。大约有 700 万行,需要大约 1.6s 才能得到结果。 3亿,需要30多秒。

ebdb=> explain analyse select address, similarity(address, '781 maun st') as sml from addresses where address % '781 maun st' order by sml desc limit 10;
QUERY PLAN
————————————————————————————————————————————————————————————————————————————————
Limit (cost=7615.83..7615.86 rows=10 width=16) (actual time=1661.004..1661.010 rows=10 loops=1)
-> Sort (cost=7615.83..7634.00 rows=7268 width=16) (actual time=1661.003..1661.005 rows=10 loops=1)
Sort Key: (similarity((address)::text, '781 maun st'::text))
Sort Method: top-N heapsort Memory: 25kB
-> Index Scan using addresses_trgm_index on addresses (cost=0.41..7458.78 rows=7268 width=16) (actual time=0.659..1656.386 rows=5241 loops=1)
Index Cond: ((address)::text % '781 maun st'::text)
Total runtime: 1661.066 ms
(7 rows)

是否有提高性能的好方法或者做表分区是个好方案?

最佳答案

PostgreSQL 9.3 ... Is there a good way to improve the performance or is it a good plan to do table partitioning?

表分区一点帮助都没有。

但是,有一个好方法:升级到当前版本的 Postgres。 GiST 索引有很多改进,特别是 pg_trgm 模块和一般的大数据。使用 Postgres 10 应该会快得多。

您的“最近邻”搜索看起来是正确的,但对于较小的 LIMIT,请改用此等效查询:

SELECT address, similarity(address, '981 maun st') AS sml 
FROM addresses
WHERE address % '981 maun st'
ORDER BY <b>address <-> '981 maun st'</b>
LIMIT 10;

Quoting the manual:

It will usually beat the first formulation when only a small number ofthe closest matches is wanted.

关于postgresql - 使用 pg_trgm 在 3 亿个地址中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44773387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com