SQL 优化 - 字符串中的字数统计 - Postgresql

标签 sql postgresql optimization parallel-processing

我正在尝试使用 Postgresql 上某个字段中的字数来更新一个大表(大约 100 万行)。 此查询有效,并设置 token_count 字段计算表 my_tablelongtext 中的单词(标记):

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 天时间不足以完成 100 万行。 你会做什么来优化它?有没有办法避免连接?

如何使用 limitoffset 将批处理分成 block ?

感谢您的任何提示,

乐龙

更新:我测量了 array_split 的性能,无论如何更新都会很慢。因此,也许解决方案包括将其并行化。如果我从 psql 运行不同的查询,只有一个查询有效,其他查询等待它完成。如何并行更新?

最佳答案

您是否尝试过使用 array_length

UPDATE my_table mt
SET token_count = array_length(regexp_split_to_array(trim(longtext), E'\\W+','g'), 1)

http://www.postgresql.org/docs/current/static/functions-array.html

# select array_length(regexp_split_to_array(trim(' some long text  '), E'\\W+'), 1);
 array_length 
--------------
            3
(1 row)

关于SQL 优化 - 字符串中的字数统计 - Postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17197929/

相关文章:

python - 如何在不使用 ORM 的情况下使用 Flask Web 应用程序配置 postgresql?

java - 你能帮我实现 Clarke 和 Wright 算法吗?

r - R中 “glm”和 “optim”参数的区别

java - 有哪些方法可以优化在 Android 上运行的服务?

MySQL 两次分组和 COUNT

Mysql枚举不搜索没有引号值的记录

java - 挂起 PostgreSQL 进程

postgresql - 错误 : syntax error at or near "return" postgresql

c# - 如何使用用户输入和通配符编写 SQL 查询

sql - 空字符串查询的 Coldfusion 查询