sql - Postgres 正则表达式替换性能

标签 sql regex postgresql

我有一个 Postgres 性能问题。我有一个包含大约 500K 行文本的表格。我需要做一些全局搜索和替换例程。这两个 UPDATE 语句中的一个会比另一个快得多吗?或者它们在性能上会非常相似吗?

update mytable
set mycolumn = regexp_replace(mycolumn, 'ReplaceMe','WithMe', 'g');

update mytable
set mycolumn = regexp_replace(mycolumn, 'ReplaceMe','WithMe', 'g')
where mycolumn like '%ReplaceMe%';

最佳答案

一般来说,如果包含一个 where 语句来限制它们,SQL 查询总是更快。所以第二个绝对应该更快。本质上,数据库能够非常快速地完成这种操作。第一个首先获取整个列表,然后通过正则表达式语句检查它。后者只需对缩短的列表执行正则表达式。

然而,作为a_horse_with_no_name pointed out ,除非有与 %ReplaceMe% 关联的索引,否则查询不会更快。但是,它仍然应该稍微快一些,因为通过 regex 命令处理的项目更少。

关于sql - Postgres 正则表达式替换性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13541181/

相关文章:

sql - 查询具有相同列名的两个表的内部联接,字段列表中的列 'exName'不明确

mysql - MySQL中最 "space effective"的文本存储方式是什么?

sql - 计算 1 <-> 1..n 中最常见的值 | 0..N <-> 1 在一次查询中

java - 为什么 [\\s*] 不等同于\\s*?

ruby-on-rails - 如何为 postgres ActiveRecord 迁移自动运行 `SET ROLE`?

sql - 反向 SQL 查询模式修改

sql - 在 Amazon Redshift 中使用 Diststyle ALL 的表应该有多小?

sql - 插入 HANA 表并指定列

java - java中高效的字符串匹配

c# - SingleLine 选项和\n 字符串结尾之前的正则表达式问题