Eri*_*ric 14 sql case-statement asp-classic
什么更有效 - 使用sql中的case语句处理或使用代码中的if语句处理相同的数据.我问,因为我的同事有一个包含许多案例陈述的巨大查询.我建议她通过编写案例陈述来减轻数据库的压力.我发现它更有效......但为什么呢?
Aar*_*ght 28
有一个更基本的问题,这里没有被问到:这些CASE陈述实际上在做什么?
忘记表演一分钟.如果CASE仅用于转换查询的最终输出,并且实际上可以用ASP if或select caseASP 替换相同的功能,则可能意味着数据库查询/过程正在尝试执行UI应该负责的事情用于格式化等.关注点分离问题比任何可能的性能问题都严重得多.
如果您有这样的查询:
SELECT InvoiceID, InvoiceDate,
CASE WHEN PaidStatus = 0 THEN 'Unpaid' ELSE 'Paid' END
FROM ...
Run Code Online (Sandbox Code Playgroud)
这很愚蠢,因为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 TotalPaid
FROM ...
Run Code Online (Sandbox Code Playgroud)
甚至不要尝试将这种逻辑移动到UI,因为数据库要好得多.并且它在CASE语义上是查询的一部分("计算x的有偿和无偿总金额"),它不会接管任何UI功能.
首先要担心逻辑实际所属的位置,这取决于它想要实现的目标.如果您实际注意到重大性能问题,性能问题应该只进入讨论.