正则表达式的内部联接

时间:2010-06-05 00:30:07

标签: sql regex postgresql join

我在正则表达式上有一个内连接 - 它非常慢。有没有简单的方法来加快速度?我正在使用postgres。

FROM A
inner join B ON trim(lower(replace(replace(replace(B.enginequery,',',' '),'"',' '),'+',' '))) = trim(lower(A.keyphrase))
             OR trim(lower(replace(replace(replace(B.enginequery,',',' '),'"',' '),'+',' '))) ~ (trim(lower(A.keyphrase)) || '$')
             OR trim(lower(replace(replace(replace(B.enginequery,',',' '),'"',' '),'+',' '))) ~ (trim(lower(A.keyphrase)) || ' ')

2 个答案:

答案 0 :(得分:3)

  

有没有简单的方法可以加快速度?

性能受到影响的原因是所有操作,更不用说正则表达式了,只是为了匹配而执行。您需要简化关系,以便不需要执行这些关系。

答案 1 :(得分:1)

我首先将结果放在:

 trim(lower(replace(replace(replace(B.enginequery,',',' '),'"',' '),'+',' ')))

进入表格中的一列。至少然后一个人不必重复计算它。你如何在postgres中实现我不知道的。在Ms sql server中,我会尝试一个计算列,以便我的应用程序不必知道更新B.enginequery及其清理版本。

然后,我可能最终会在清理过的列上尝试索引。