我在正则表达式上有一个内连接 - 它非常慢。有没有简单的方法来加快速度?我正在使用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)) || ' ')
答案 0 :(得分:3)
有没有简单的方法可以加快速度?
性能受到影响的原因是所有操作,更不用说正则表达式了,只是为了匹配而执行。您需要简化关系,以便不需要执行这些关系。
答案 1 :(得分:1)
我首先将结果放在:
trim(lower(replace(replace(replace(B.enginequery,',',' '),'"',' '),'+',' ')))
进入表格中的一列。至少然后一个人不必重复计算它。你如何在postgres中实现我不知道的。在Ms sql server中,我会尝试一个计算列,以便我的应用程序不必知道更新B.enginequery及其清理版本。
然后,我可能最终会在清理过的列上尝试索引。