使用子字符串与使用通配符的SQL比较的性能

Swo*_*op 6 sql db2 optimization ibm-midrange

我正在处理两个表之间的连接条件,其中一个要匹配的列是值的连接.我需要将tableA中的columnA加入tableB中columnB的前2个字符.

我已经开发了两个不同的语句来处理这个问题,我试图分析每种方法的性能.

方法1:

ON tB.columnB   like  tA.columnA || '%'
Run Code Online (Sandbox Code Playgroud)

方法2:

ON substr(tB.columnB,1,2) = tA.columnA
Run Code Online (Sandbox Code Playgroud)

与方法2相比,查询执行计划使用方法1的步骤少得多,但是,方法2的执行速度要快得多.此外,执行计划显示方法2的建议索引,可以提高其性能.

我在IBM iSeries上运行它,虽然对一般意义上的答案感兴趣,以了解有关sql查询优化的更多信息.

方法2执行得更快是否有意义?

这个问题类似,但看起来没有人对这些方法的性能差异提供任何具体的答案: LEFT()与LIKE运算符之间的T-SQL速度比较.

PS:需要这种类型的连接的表设计不是我此时可以更改的内容.我意识到将具有不同类型数据的字段分开是可取的.

Swo*_*op 0

我在一本与 SQL 性能相关的 IBM 红皮书中找到了这个参考资料。听起来 iSeries 可以以优化的方式处理 SUBSTR 标量函数。

如果搜索第一个字符并希望使用 SQE 而不是 CQE,则可以在等号左边使用标量函数子字符串。如果您必须在字符串中搜索其他字符,您还可以使用标量函数 POSSTR。通过将 LIKE 谓词拆分为多个标量函数,可以影响查询优化器使用 SQE。

http://publib-b.boulder.ibm.com/abstracts/sg246654.html?打开