【问题标题】:DB2: Improve performance of SQL query with scalar functionDB2:使用标量函数提高 SQL 查询的性能
【发布时间】:2015-02-27 21:57:12
【问题描述】:

我有一个大型查询,我正在尝试对其进行优化。我想改变的条件之一如下所示。即我正在尝试删除标量函数。

当前:

DATE( ACTIVITY.CREATED) ='2009-02-18'    

ACTIVITY.CREATED BETWEEN  '2009-02-18 00:00:00' AND '2009-02-18 24:00:00' 

在检查了解释计划后,我没有看到太大的改进。实际上估计成本从 4532.380859 到 4532.601074

任何建议都会有所帮助。

【问题讨论】:

  • ehh 您不会像以前那样消除标量函数,而是将它们逐行编写。例如,如果您使用自定义标量函数描述(partno)检索部件描述,您只需加入partsDescription 文件并显示描述列。如果您有任何子选择,请将它们删除并重写为连接或公用表表达式,然后 FGS 删除任何以通配符开头的类似语句。
  • 建议要求至少查看查询以及任何相关数据定义。之后,可能需要查看存在哪些索引。最多可能需要查看说明。
  • @danny117 - 在条件上使用函数通常意味着优化器无法通过索引满足检查(假设存在相关索引,在这种情况下可能不太可能)。 @Vinayak - 我不确定BETWEEN 是否符合您的预期。请记住,上限是包容性的,因此它可能包括从第二天午夜开始的任何行(我不确定24:00:00 的排序是否小于00:00:00...)。请帮自己一个忙,只需use an exclusive upper bound
  • 应该是 23:59:59-9999999 左右。

标签: sql db2 query-optimization query-tuning


【解决方案1】:

为什么您要删除该功能?仅当优化器确定CREATED 列上的现有索引将提供更好的访问路径时,消除该谓词中的DATE() 函数才会产生影响。如果没有这样的索引,或者优化器选择了更好的索引(对于查询中的其他谓词),那么您得到您找到的结果也就不足为奇了。

【讨论】:

    猜你喜欢
    • 2013-04-12
    • 2013-04-15
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    相关资源
    最近更新 更多