我正在尝试使用 Postgresql 上的字段中的字数更新一个大表(大约 1M 行)。此查询有效,并设置token_count
字段计数longtext
表中的单词(标记) my_table
:
UPDATE my_table mt SET token_count =
(select count(token) from
(select unnest(regexp_matches(t.longtext, E'\\w+','g')) as token
from my_table as t where mt.myid = t.myid)
as tokens);
myid
是表的主键。
\\w+
是必要的,因为我想计算单词,忽略特殊字符。例如,A test . ; )
将返回 5 和基于空间的计数,而 2 是正确的值。问题是它非常慢,2 天不足以在 1M 行上完成它。你会做什么来优化它?有没有办法避免加入?
如何使用例如limit
和将批次拆分为块offset
?
感谢您的任何提示,
穆龙
更新:我测量了array_split的性能,无论如何更新都会很慢。所以也许一个解决方案包括并行化它。如果我从 运行不同的查询psql
,则只有一个查询有效,其他查询等待它完成。如何并行更新?