Postgres Regex取代性能

时间:2012-11-24 12:26:02

标签: 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%';

1 个答案:

答案 0 :(得分:3)

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

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