4

我有一个 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%';
4

1 回答 1

4

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

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

于 2012-11-24T12:29:22.660 回答