1

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

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

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

提前致谢!

基督教

4

1 回答 1

1

鉴于 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;
于 2013-11-03T06:40:29.760 回答