DB2 COALESCE - 对查询时间执行的显着影响

时间:2015-09-16 20:48:24

标签: sql performance db2 prepared-statement coalesce

我注意到使用COALESCE(在我的情况下)来避免预准备语句中可能出现的NULL值会导致DB查询时间执行性能下降。有人可以解释一下根本原因是什么,我该如何克服这个问题?查询下面的示例:

QUERY 1(执行时间3秒):

SELECT TABLE_A.Y, TABLE_B.X
FROM ...
WHERE Z = ? AND TABLE_A.ABC = ? AND
     TABLE_A.QWERTY = ? AND TABLE_A.Q = TABLE_B.Q;

QUERY 2(执行时间210秒):

SELECT TABLE_A.Y, TABLE_B.X
FROM ...
WHERE Z = ? AND (
  (COALESCE(?,'')='') OR 
  (TABLE_A.ABC = ? AND TABLE_A.QWERTY = ? AND TABLE_A.Q = TABLE_B.Q)
);

唯一的区别是使用(COALESCE(?,'')='')。

1 个答案:

答案 0 :(得分:0)

我看到的更大问题是QUERY 13个占位符,而QUERY 24个占位符。

我认为你要做的是你想让你的占位符可选。

执行此操作的一种简单方法是按如下方式修复QUERY 1

SELECT TABLE_A.Y, TABLE_B.X
FROM TABLE_A
INNER JOIN TABLE_B ON TABLE_A.Q = TABLE_B.Q;
WHERE Z = ? 
  AND TABLE_A.ABC = COALESCE(?,TABLE_A.ABC) 
  AND TABLE_A.QWERTY = COALESCE(?,TABLE_A.QWERTY)