我正在优化 Postgres 数据库中的搜索查询。该查询使用 unaccent 函数。 我想创建一个 gin-index 以使搜索查询更快。因此,我阅读了一些关于使用包装函数将稳定函数伪造为不可变函数的文章。 我正在考虑为预先计算的非重音文本创建一个新列会很好。但我知道 unaccent 函数可以产生不同的输出。 那么首选的方式是什么? 预计算或使用包装函数来欺骗程序?
你可以阅读这篇关于不重音扩展的Postgres文档,在我看来,有两种情况:
1- 将 slug 列添加到表中:
优点:
缺点:
冗余数据,几乎如果你需要实现多标准搜索,在这种情况下你应该为所有相关列创建一个slug(不带变音符号)
更新列意味着更新所有相关的 slug 列
例如,使用 Slugify 自动创建 slug,为现有数据库创建数据迁移。
2- 使用非重音扩展
优点:
缺点: