gpt4 book ai didi

performance - Postgres tsvector_update_trigger 有时需要几分钟

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

我在我的 postgres 数据库中的一个表上配置了自由文本搜索。非常简单的东西,有名字、姓氏和电子邮件。这很好用而且速度很快。

但是,在向表中插入新条目时,我确实有时会遇到很长的延迟,插入会持续运行几分钟,还会生成巨大的 WAL 文件。 (我们使用 WAL 文件进行复制)。

我的自由文本索引有什么需要注意的吗?像 Postgres 一样,可能出于性能原因随机重组它?我的索引目前大约有 400 MB。

提前致谢!

基督徒

最佳答案

鉴于 WAL 文件的大小,我怀疑您是对的,索引更新/重新平衡导致了问题。但是我想知道还有什么事情发生。

我建议不要将 tsvectors 存储在单独的列中。更好的方法是在 to_tsvector() 的输出上运行索引。如果需要,您可以为多种语言创建多个索引。因此,我建议不要采用一个触发器,比如说,一个名为 description 的字段并将 tsvector 存储在 desc_tsvector 中:

 CREATE INDEX mytable_description_tsvector_idx ON mytable(to_tsvector(description));

现在,如果您需要在整个表中使用一致的搜索界面,可以使用“表方法”以更优雅的方式实现这一点。

一般来说,函数式索引方法的相关问题比其他任何方法都少。

现在您应该注意的第二件事是部分索引。如果需要,您可以只索引感兴趣的记录。例如,如果我的大部分查询只检查去年,我可以:

 CREATE INDEX mytable_description_tsvector_idx ON mytable(to_tsvector(description))
WHERE created_at > now() - '1 year'::interval;

关于performance - Postgres tsvector_update_trigger 有时需要几分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17983724/

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