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?打开