我注意到使用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(?,'')='')。
答案 0 :(得分:0)
我看到的更大问题是QUERY 1
有3
个占位符,而QUERY 2
有4
个占位符。
我认为你要做的是你想让你的占位符可选。
执行此操作的一种简单方法是按如下方式修复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)