优化查询以搜索串联的行值

时间:2019-05-30 16:58:29

标签: sql

我正在处理一些旧的SQL代码,并且正在寻求一些帮助来修复我遇到的奇怪查询。看起来像这样:

SELECT * 
FROM   TA LEFT OUTER JOIN TB ON TA.a1 = TB.b3
WHERE  TA.a1 LIKE 'usersearch'
    OR TB.b1 + ':' + TB.b2 LIKE 'usersearch'

usersearch是用户提供的正则表达式,在创建查询时未知。

两个LIKE部分中的usersearch变量相同。这是一段疯狂的代码,需要花费很多时间才能运行,但是我很难确定如何对其进行优化。

糟糕的是,它构造了一个字符串以对每行执行一个正则表达式。但是,我不确定如何避免这种情况。

如果有人有任何想法,我很想听听他们!

1 个答案:

答案 0 :(得分:1)

您的条件:TB.b1 + ':' + TB.b2 LIKE 'usersearch'non-sargable,并将始终进行表扫描。您可能要考虑创建一个持久化的计算列,以便可以对其进行索引。那应该提高性能。但是,您的问题表明“ usersearch”是一个RegEx。 LIKE不适用于RegEx。它可以与%_通配符一起使用。我希望这只是术语错误。如果确实是RegEx,那么您将需要一个非常不同的解决方案。无论如何,可燃性问题仍然需要解决。