gpt4 book ai didi

sql - 案例陈述与编码的if陈述

转载 作者:行者123 更新时间:2023-12-03 21:07:57 27 4
gpt4 key购买 nike

更有效率的方法-使用sql中的case语句处理,或使用代码中的if语句处理相同的数据。我之所以问是因为我的同事有一个很大的查询,其中包含许多案例陈述。我建议她通过编写case语句来减轻数据库负担。我发现它更有效...但是为什么呢?

最佳答案

这里没有一个更基本的问题:这些CASE语句实际上在做什么?

一分钟忘了表演。如果CASE仅用于转换查询的最终输出,并且实际上有可能用ASP中的ifselect case替换相同的功能,则可能意味着数据库查询/过程正在尝试执行UI的操作应该负责诸如格式化。关注点分离问题比任何可能的性能问题都更为严重。

如果您有这样的查询:

SELECT InvoiceID, InvoiceDate,
CASE WHEN PaidStatus = 0 THEN 'Unpaid' ELSE 'Paid' END
FROM ...

这真是愚蠢的,因为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 ...

甚至不要尝试将这种逻辑移至UI,因为数据库要好得多。而且 CASE在语义上是查询的一部分(“计算x的已付和未付总额”),它不接管任何UI函数。

首先,要根据逻辑要完成的工作来担心逻辑实际上在哪里。仅当您实际上注意到严重的性能问题时,才应将性能问题纳入讨论。

关于sql - 案例陈述与编码的if陈述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2429226/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com