我有一个 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/