您好,谢谢您阅读我的问题!
当前,我们通过stolon(https://github.com/sorintlab/stolon)在3个节点上使用PostgreSQL v.10 我们有3个表格(我想简化我的问题):
主查询看起来像这样(原始查询很大,使用临时表,并且有很多条件,但该示例显示了我的问题。)
select
i.*
from invoice as i
inner join get_similar_name('Jon') as s on i.name ilike s.name
left join user_address as a on i.user_id = a.user_id
where
a.state = 'OH'
and
i.last_name = 'Smith'
and
i.date between '2016-01-01'::date and '2018-12-31'::date;
函数get_similar_name
返回相似的名称(例如:get_similar_name('Jon') will return John, Jonny, Jonathan ...
等),平均返回200至1000个名称。我必须使用功能:\
查询执行了很长时间,大约30-120秒,
但是如果我从查询中排除函数get_similar_name
,则执行时间将不超过1秒。
我已经配置了PostgreSQL,并且服务器运行良好。我还创建了索引,而我的查询不使用seq scan等。
我们无法创建分区表,因为我们为此有很多列。我们不能只将一张桌子划分成一行。
我考虑将仓库迁移到MongoDB
我的问题是:
get_similar_name
?如果是,怎么办?答案 0 :(得分:1)
我不知道迁移到MongoDB是否可以解决文本搜索问题,但是Postgres具有出色的功能,例如Vector和trigram。你累了吗?
https://www.compose.com/articles/mastering-postgresql-tools-full-text-search-and-phrase-search/
https://www.postgresql.org/docs/9.6/pgtrgm.html
在我以前的项目中,我们使用了pg_trgm,并且对其性能非常满意。