为什么Postgres中的unaccent函数是一个稳定的函数?列中的预计算会产生不同的输出吗?

问题描述 投票:0回答:1

我正在优化 Postgres 数据库中的搜索查询。该查询使用 unaccent 函数。 我想创建一个 gin-index 以使搜索查询更快。因此,我阅读了一些关于使用包装函数将稳定函数伪造为不可变函数的文章。 我正在考虑为预先计算的非重音文本创建一个新列会很好。但我知道 unaccent 函数可以产生不同的输出。 那么首选的方式是什么? 预计算或使用包装函数来欺骗程序?

postgresql indexing query-optimization psql unaccent
1个回答
0
投票

你可以阅读这篇关于不重音扩展的Postgres文档,在我看来,有两种情况:

1- 将 slug 列添加到表中:

优点

  • 立即对现有数据库的相关表列进行 Slugify
  • 通过 slug 搜索。

缺点

  • 冗余数据,几乎如果你需要实现多标准搜索,在这种情况下你应该为所有相关列创建一个slug(不带变音符号)

  • 更新列意味着更新所有相关的 slug 列

  • 例如,使用 Slugify 自动创建 slug,为现有数据库创建数据迁移。

2- 使用非重音扩展

优点

  • 不需要创建新的数据库列
  • 稳定且值得信赖的扩展
  • 易于实施

缺点

  • 需要数据迁移才能在 PROD ENV 上安装扩展
  • 如果更改 DBMS,您将需要更换扩展
© www.soinside.com 2019 - 2024. All rights reserved.