这里没有一个更基本的问题:这些
CASE语句实际上在做什么?
一分钟忘了表演。如果
CASE仅用于转换查询的最终输出,并且实际上可以用
if或
selectcase在ASP中替换相同的功能,则可能意味着数据库查询/过程正在尝试执行UI应负责的事情例如格式。关注点分离问题比任何可能的性能问题都更为严重。
如果您有这样的查询:
SELECT InvoiceID, InvoiceDate, CASE WHEN PaidStatus = 0 THEN 'Unpaid' ELSE 'Paid' ENDFROM ...
这真是愚蠢的,因为UI或进行数据到域映射的任何层都应该知道如何将数据库中的状态转换为其相应的描述。在查询本身中包含此逻辑没有任何意义。
另一方面,如果
CASE构造是查询的必要组成部分,例如:
SELECt SUM(CASE WHEN PaidStatus = 0 THEN Amount ELSE 0 END) AS TotalUnpaid, SUM(CASE WHEN PaidStatus = 1 THEN Amount ELSE 0 END) AS TotalPaidFROM ...
甚至不要尝试将这种逻辑移至UI,因为数据库 要 好得多。并且在
CASE语义上是查询的一部分(“计算 x的已
付款和未付款总额”),它不会接管任何UI函数。
首先,要根据逻辑要完成的工作来担心逻辑实际上在哪里。仅当您实际上注意到严重的性能 问题时, 才应该对性能问题进行讨论。



