我有一个很长的CASE
语句,这会使查询很长。还有其他方法吗?长CASE
声明会影响绩效吗?我看到有人在推荐,COALESCE
但是我不确定这是否是我查询中的好选择。
下面的示例a,b,c,d,e,f是表中的列,但我仅在此处使用字母作为示例。
UPDATE table
SET totalAmt = CASE
WHEN product_id = 1 THEN a*b*c*d
WHEN product_id = 2 THEN c*d*e + 1
WHEN product_id = 3
THEN
CASE WHEN term = 12 THEN b*c*d*e ELSE a*b*e*f END
WHEN product_id = 4 THEN a+b+c+d
etc.....
END
FROM table
我不希望CASE
语句本身有任何性能问题。由于您的一个查询正在对数据进行一次传递,因此对于每个产品ID,它的性能可能比多次查询要好得多。
使用WHERE
子句,查询可能会更好地执行-如果您的长查询甚至可以做到这一点。
如果该表很大,并且按产品ID进行索引,并且该查询正在更新一小部分产品,则可能会获得更好的性能,将UPDATE
每个产品ID的查询分为几个单独的查询即可。否则,您可能最终会对一个巨大的表进行表扫描。例如:
UPDATE table SET totalAmt = a*b*c*d WHERE product_id = 1
UPDATE table SET totalAmt = c*d*e + 1 WHERE product_id = 2
如果所有情况都取决于product_id
,则可以缩写如下语法:
CASE product_id
WHEN 1 THEN a*b*c*d
WHEN 2 THEN ...
END
我建议使用注释使代码更具可读性。例如,如果产品是一组硬编码的已知ID,则可以指定它们是什么。同样,它可能有助于将来的代码维护来解释该计算:
UPDATE table
SET totalAmt =
CASE WHEN product_id = 1 -- table
THEN a*b*c*d -- some explanation of calculation
CASE WHEN product_id = 2 -- chair
THEN ...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句