【发布时间】: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