gpt4 book ai didi

database - 如何在postgres中实现全名搜索

转载 作者:搜寻专家 更新时间:2023-10-30 22:13:58 24 4
gpt4 key购买 nike

我在 postgres 8.1 数据库中有一个表,其中包含大约 370,000 个客户的信息。该表包括字段 sn(姓氏)和 gn(名字)。我想让用户能够使用 or 或 or 简单地搜索客户的全名。我第一次尝试构建查询是这样的:

SELECT sn || ', ' || gn as name from users 
WHERE sn || ' ' || gn like '%Johnson David%'
or gn || ' ' || sn like '%Johnson David%'

这工作正常,但速度很慢,达到 600/623 毫秒。为了优化,我只在 sn 字段上创建了一个索引,因为我猜测 gn 字段将包含太多重复项以致于对索引无用。不幸的是,索引 surname 根本没有提高性能,因为查询没有使用索引。

用户序列扫描(成本=0.00..18296.06 行=1 宽度=64)(实际时间=57.935..588.755 行=8 循环=1)

我猜这是因为 this thread 中描述的原因.我考虑过使用多列索引,但我猜这意味着我只能搜索上面提到的两种样式之一,即 or 但不能同时搜索。

我也考虑过创建一个全文索引,但它似乎不适合名称值,因为我会得到很多不相关的词干等等。有人对索引策略有什么建议吗?看起来它应该是一个很常见的用例。

最佳答案

它不会使用索引,因为您在字符串“%...”的开头使用了通配符。这行不通。考虑 using trigrams .或者,您可以使用 f ull text search特征。这两种方法都需要更新版本的 Postgres。无论如何你应该更新。 8.1 是石器时代的旧版本,不受支持,更新的版本不仅速度更快,而且还会为您提供更多功能来处理您想要的内容。

关于database - 如何在postgres中实现全名搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17784314/

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