我有一个很长的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进行索引,并且查询正在更新一小部分产品,则可能会获得更好的性能,将查询分为每个product_id分开的UPDATE
查询。否则,您可能最终会对一个巨大的表进行表扫描。例如:
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 ...
关于sql - SQL Server:长CASE语句的替代方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28838994/